连接后将文本发送到serversocket

时间:2013-05-16 14:23:02

标签: java sockets inputstream messages outputstream

我遇到一个问题,我无法向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”发送到SocketServer,我应该在这个try块中放置socket.getOutputStream().write("mystring".bytes())之类的内容吗?

我试图将它放在任何地方并且它始终不起作用,发送“mystring”我总是必须在此客户端的控制台中按Enter键(控制台用于从控制台向服务器发送消息)。并且“mystring”也被打印到客户端的控制台,但它必须只在服务器端打印。

我需要不是从控制台发送“mystring”,而是在将套接字连接到服务器后自动发送。

请帮忙。感谢。

2 个答案:

答案 0 :(得分:0)

你应该在写完之后尝试刷新()流,这可能会有所帮助。

据我所知,telnet将每个单独接收的字节作为回显发送回来,因此如果您不想显示回声,则应检索连接的输入流,并手动删除所有回声。

答案 1 :(得分: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();
}
}

希望这有帮助!

编辑:您还必须处理例外情况。我没有明显添加任何处理。