import java.net.*;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.io.*;
public class Server{
private ServerSocket serversock;
private Socket sock = null;
private HashMap hm = new HashMap();
public Server(){
try{
// port번호를 받아들여 ServerSocket 생성.
int port = 10013;
ServerSocket serversock = new ServerSocket(port);
System.out.println("Client Wait..");
/* accept()를 시행하고 블러킹 상태.
* Client로 부터 소켓 연결 요청이 들어오면
* 그 소켓을 인자로 EchoThread를 생성하고 스레드 시작.
*/
while(true){
Socket sock = serversock.accept();
//PrintWriter pw = new PrintWriter(sock.getOutputStream());
EchoThread echothread = new EchoThread(sock,hm);
echothread.start();
}
}catch(Exception e){
System.out.println("connect error !");
System.out.println(e);
}
}
public static void main(String[] args){
new Server();
}
class EchoThread extends Thread{
// 연결된 소켓을 받을 소켓멤버변수.
private Socket sock;
private BufferedReader br;
private PrintWriter pw;
private HashMap hm = new HashMap();
private String ip;
private boolean initFlag = false;
InetAddress addr = sock.getInetAddress();
// 생성자.
public EchoThread(Socket sock,HashMap hm)
{
this.sock = sock;
this.hm = hm;
try{
// 클라이언트의 IP를 구하고 연결 메시지 출력.
System.out.println(addr.getHostAddress() + "Connected..");
ip=addr.getHostAddress();
// 연결된 소켓에 입력스트림과 출력스트림을 연결.
br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
pw = new PrintWriter(new OutputStreamWriter(sock.getOutputStream()));
broadcast("connect!");
synchronized(hm){
hm.put(ip,pw);
}
initFlag = true;
}catch (Exception e) {
System.out.println(e);
}
}
public void run()
{
try{
String msg = null;
// 입력스트림에서 메시지가 올 경우.
while((msg = br.readLine()) != null){
// 메시지를 콘솔에 출력하고 그 메시지를 다시 출력스트림으로 전송.
System.out.println("From " + addr.getHostAddress() + "'s Message: " + msg);
broadcast("bc : "+msg);
// 클라이언트에게 전송한 메시지가 exit 라면 종료.
if(msg.equals("exit")){
break;
}
}//while
}catch(Exception ex){
System.out.println(ex);
}finally{
synchronized(hm){
hm.remove(ip);
broadcast("bc : "+ip+" disconnect");
}
try{
if(sock != null){
pw.close();
br.close();
sock.close();
}
}catch(Exception ex){
}
}//finally
}
public void broadcast(String msg){
synchronized(hm){
Collection col = hm.values();
Iterator iter = col.iterator();
while(iter.hasNext()){
PrintWriter pw = (PrintWriter)iter.next();
pw.println(msg);
pw.flush();
}
}
}//broadcast
}
}
커넥트 에러가 떠요 ㅠㅠ
클라에서 메세지를 보내면 서버랑 연결되어있는 모든 클라한테 메시지를 보내는 서버 만든거거든요
다른 에러는 없는지 함 봐주세요