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() ...

socket.getOutputStream().write("mystring".bytes())如果我想在连接到 SocketServer 后将此文本“mystring”发送到 SocketServer,我应该在这个 try 块的哪个位置放置类似的东西?

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

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

请帮忙。谢谢。

4

2 回答 2

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();
}
}

希望这会有所帮助!

编辑:您还必须处理异常。我显然没有添加任何处理。

于 2013-05-16T18:28:39.407 回答
0

您应该在写入后尝试刷新()流,它可能会有所帮助。

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

于 2013-05-16T16:40:48.353 回答