我想制作一个将用Java编写的聊天应用程序。
一台计算机将托管服务器,另一台计算机将启动套接字[tcp端口]。
从我读到的内容来看,应该有一个循环会不断读取套接字,这意味着它将使代码卡住。
我有一个在释放鼠标时“ Action 执行”的按钮,我想知道它是否可以与不断读取套接字的循环一起使用,以便它也可以发送我编写的信息。
如果必须对其进行线程化,我想知道run()
方法是否必须为空,因为如果对它进行线程化将意味着创建一个新类,并且整个GUI都是一个大类,其中包括一个文本区域,并且是私有(private)的。
另外,如何将信息直接从套接字提取到文本区域(可以说textarea变量称为“chatOutput
”)?
最佳答案
我认为这是您的情况:
您有一个GUI,该GUI带有用于输入聊天消息的文本区域,以及一个将新消息提交到聊天室的按钮。您想通过在Socket的InputStream上循环来保持一些面板的聊天消息流更新,而且还希望能够在InputStream被循环时写入到Socket的OutputStream。
这是我对客户端代码的建议:
Socket con = new Socket(host, port);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
PrintWriter out = new PrintWriter(con.getOutputStream(), true);
...
Thread t = new Thread(new Runnable() {
public void run() {
while(con.isConnected()) {
String line = in.readLine();
// update your chat panel with line
}
}
});
t.start();
...
并在您的行动中:
...
out.println(/*contents of the text box*/);
// clear contents of text box
// ?update panel?
...
关于java - 线程套接字处理程序,用于在tcp端口中进行双向通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2795263/