2013-05-16 1 views
0

ChatServer에 텍스트를 보낼 수 없다는 문제가 있습니다. 내 코드 : 연결 후 서버 소켓에 문자 메시지 보내기

... 
try { 
     socket.connect(address); 

     System.out.println("Successfully connected to server!"); 

     Thread fromServerToConsole = new TelnetThread(socket.getInputStream(), System.out); 
     Thread fromConsoleToServer = new TelnetThread(System.in, socket.getOutputStream()); 

     fromConsoleToServer.setDaemon(true); 

     fromServerToConsole.start(); 
     fromConsoleToServer.start(); 

     fromServerToConsole.join(); 

     socket.close(); 
} catch() ... 

어디 내가 그것을 연결 한 후 SocketServer이 텍스트 "mystring에"를 보내려면 socket.getOutputStream().write("mystring".bytes()) 같은 것을 넣어해야이 try 블록에서?

나는이 모든 것을 넣으려고했는데 항상 작동하지 않았다. "mystring"을 보내려면이 클라이언트의 콘솔에서 항상 Enter 키를 눌러야합니다 (콘솔은 콘솔에서 서버로 메시지를 보내기위한 것입니다). 그리고 "mystring"은 클라이언트의 콘솔에도 인쇄되었지만 서버 측에만 인쇄되어야합니다.

콘솔에서 "mystring"을 보내야하지만 소켓을 서버에 연결 한 후 자동으로 보내야합니다.

도와주세요. 감사.

+0

줄 종결 자도 보내야 할 것 같은데요. – EJP

답변

0

작성 후 스트림을 플러시()해야합니다. 도움이 될 수 있습니다.

내가 아는 한, 텔넷은 수신 된 모든 바이트를 에코로 다시 전송하므로 에코를 표시하지 않으려면 연결의 입력 스트림을 검색하고 모든 에코를 수동으로 삭제해야합니다.

+0

아니요. flush()가 전혀 도움이되지 않습니다. – PerwinCZ

0

조금 지나치게 많은 것처럼 보입니다. 일반 소켓을 사용하는 것과 같은 오버 헤드가없는보다 간단하고 효율적인 방법을 권장합니다. 클라이언트 코드 조각 :

public static void main(String[] args) { 
String ip = "Your IP/Hostname"; 
//set your port 
int port = 7391; 
Socket s = new Socket(ip, port); 
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); 
s.writeUTF("String To Write To SocketServer"); 
s.flush(); 
out.close(); 
s.close(); 
} 

서버 발췌문 :

public static void main(String[] args) { 
ServerSocket s = new ServerSocket(7391); 
while (true) { 
new SocketWorker(s.accept()).start(); 
} 
} 

public static class SocketWorker extends Thread { 
Socket s; 
public SocketWorker(Socket s) { 
this.s = s; 
} 
@Override 
public void run() { 
DataInputStream in = new DataInputStream(new BufferedInputStream(s.getInputStream())); 
//Receive String sent via the client 
String response = in.readUTF(); 
in.close(); 
s.close(); 
} 
} 

는 희망이 도움이!

편집 : 예외도 처리해야합니다. 분명히 어떤 처리도 추가하지 않았습니다.