连接后将文本发送到serversocket

quia_a 发布于 2019-03-15 inputstream 最后更新 2019-03-15 14:54 5 浏览

我有一个问题,我无法发送文本到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”,但在将套接字连接到服务器后自动发送。 请帮忙。谢谢。
已邀请:

eomnis

赞同来自:

看起来你有点过分了。我建议一个更简单,更有效的方法,没有那么多的开销,如使用普通的套接字。 客户端代码段:

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();
}
}
希望这有帮助! 编辑:您还必须处理例外。我没有明显添加任何处理。

xhic

赞同来自:

您应该在写完后尝试flush()流,这可能会有所帮助。 据我所知,telnet将每个单独接收的字节作为回显发送回来,因此如果您不想显示回声,则应检索连接的输入流,并手动删除所有回声。