我目前正在开发一个聊天应用程序,总体来说很简单,但是我在从客户端和服务器端接收字符串时遇到了问题。我使用一个线程被动地在套接字上监听传入的消息,这是我怀疑问题所在的地方。我这样做对吗?
来源:发送字符串的代码:
send.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
messageBuffer = message.getText();
out.println(messageBuffer);
chat.append(username + ": " + messageBuffer + "\n");
message.setText("");
}
});
然后我有这个被动地听(问题可能在这里):
public void run(){
while(true){
try {
messageBufferIn = in.readLine();
System.out.println(in.readLine());
chat.append(recipient + ": " + messageBufferIn + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
我还用这个调用线程:
public static void startChatting(){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
谢谢你能提供的任何帮助,我对线程总体来说还是新手,所以我的错误可能相当平庸。
编辑:问题是当我尝试向接收者发送消息时,没有任何通过,我可以确认它们已连接。事实上,System.out.println(in.readLine());根本不通过,甚至没有“空”输出。
我怀疑您的主要问题是您没有刷新OutputStream
。您需要添加<code>。flush()在您完成写入并想要发送消息之后。例如,您的ActionListener
如下所示:
send.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
messageBuffer = message.getText();
out.println(messageBuffer);
out.flush();
chat.append(username + ": " + messageBuffer + "\n");
message.setText("");
}
});
如果您不这样做,您的< code>OutputStream将一直保持在那里,直到它的缓冲区满了(这将会有很多消息)。
>
您在 Swing 中遇到并发问题,Swing GUI 不知道您在后台任务
上运行/打开套接字
,
Swing GUI
的所有更新都必须在EDT上完成,否则什么也没发生,或者你有一些例外
必须将所有更新从后台任务
(在您的情况下为Runnable#Thread
)包装到Swing GUI的的调用稍后
而(true){
是无尽循环放在那里布尔变量
而不是true
,那么你可以在你的情况下停止、启动或重新启动任何东西Socket
如果send.addActionListener(new ActionListener(){
只运行一次(如果用户通过JButton
单击调用)然后使用SwingWoker打开Socket,SwingWorker
很好地保证所有输出都应该在EDT上完成
Runnable#Thread
和SwingWorker
之间的区别在于
>被指定只运行一次
问题内容: 我想构建一个Java EE应用程序(EAR),它不仅提供Web服务(WAR)或直接JMS请求(EJB),而且还希望接受套接字请求(例如UDP数据包)。 我尝试使用java.net.DatagramSocket编写侦听器,让它作为单独的进程运行,然后将请求重定向到我的EAR应用程序。 问题是..如何将这样的套接字侦听器无缝构建到Java EE(EAR)应用程序中? 谢谢。 问题答案: 在
问题内容: 我想知道为数千名用户编写聊天应用程序的正确方法是什么。 我只是感到困惑,我如何才能每秒使用AJAX或更少的方法来对服务器执行ping操作,并检查MySQL中是否有新记录等,并且服务器负载可以接受。 我目前正在考虑使用jQuery,PHP和MySQL进行编码。 请指教。您的帮助将不胜感激。 问题答案: 客户端 对于需要轮询服务器的任何程序,我建议使用WebSockets。 我写了一个非常
我正在使用XMPP在app引擎上编写一个聊天应用程序。我的想法是允许用户互相聊天。我可以将消息发送到google talk帐户,方法是将登录的用户删除地址的@gmail.com部分,并将其替换为@appid.appspotchat.com)。例如,如果登录的用户是bob@gmail.com,则用于发送的jid将是bob@appid.appspotchat.com)。然后,您可以将消息发送到goog
现在我们已经熟悉了Socket.IO,让我们编写一个聊天应用程序,我们可以用它在不同的聊天室聊天。 我们将允许用户选择用户名并允许他们使用它们进行聊天。 首先,让我们设置我们的HTML文件来请求用户名 - <!DOCTYPE html> <html> <head> <title>Hello world</title> </head> <script src = "/s
问题内容: 在我目前正在从事的项目中,我们需要开发一个Web聊天应用程序,而不是一个非常复杂的聊天,仅是一种将两个人联系起来谈论一个非常具体的话题的方式,我们不需要任何身份验证对于这两个用户之一,我们不必支持表情符号,头像或类似的东西。 一些项目成员建议我们可以通过BOSH使用XMPP,我说这就像试图用船网抓鱼,并提出了一种更简单的方法,例如简单的Ajax / MySQL网络聊天,但是我们担心性能
我已经创建了一个聊天应用程序,为了完成它,我必须实现一些加密算法来保护服务器-客户端之间的消息。 我的实现是: 1.客户端创建kaypair(公钥和私钥)并将公钥发送到服务器 2.服务器获取公钥并创建用公钥加密的对称密钥 3.服务器将加密密钥发送给客户端 4.客户端使用私钥解锁对称密钥 5.客户端和服务器使用对称密钥进行通信。 这部分代码是服务器获取公钥并发送加密的对称密钥的地方 密钥加密方法: