我在java中创建一个聊天。 我在一个对象内部有一个方法(onMouseRelease),它创建一个tcp服务器并等待这样的套接字:
ServerSocket server = new ServerSocket(port);
Socket channel = server.accept();
现在我想创建一个循环并从套接字读取数据的线程,这样一旦另一端的用户发给我一个字符串,我将从套接字中提取数据(或者它被调用数据包?抱歉,我是新手并更新文本框以从套接字添加附加字符串(或数据包?)。
我不知道如何从套接字( / packet )读取(提取)信息,然后将其更新为名为userOutput的JTextArea。以及如何将字符串发送到另一个客户端,以便它还可以读取新数据并更新其JTextArea。 据我所知,对于双面TCP通信,您需要一台计算机来托管服务器 另一个连接(作为客户端),一旦设置了连接,客户端也可以从套接字接收新信息。真的吗?请告诉我怎么做。
任何帮助表示赞赏!我知道这有点长,但我已经搜索了很多并且不理解它(我看到了类似PrintWriter的东西,但却无法理解)。
答案 0 :(得分:2)
你必须做这样的事情;
InputStream in = new BufferedInputStream(channel.getInputStream());
然后,您可以使用循环从套接字读取字符;
char ch;
while (!finished) {
ch = in.read(); //read from socket
if(ch = -1) {
//nothing left to read
finished = true;
}
else {
//do something with ch
}
}
如果你愿意,我可以继续吗?
假设我们将传入的字符保存到名为 input 的字符串中,以更新您要调用的文本区域;
textArea.setText(input);
要将文本发送回客户端,您将使用类似的方法来接收,使用输出流;
OutputStream out = new BufferedOutputStream(clientSock.getOutputStream());
out.write(output);