我遇到一个问题,我无法向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”,而是在将套接字连接到服务器后自动发送。
请帮忙。感谢。
答案 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();
}
}
希望这有帮助!
编辑:您还必须处理例外情况。我没有明显添加任何处理。