不确定标题是否具有误导性。我无法弥补一个更好的。
重点是- 我正在尝试为多个客户端建立一个非常简单的聊天程序,使其能够连接,并且我是主机(服务器)。
我已经到了一个客户端可以成功连接的地步,并且可以从客户端和服务器发送消息而没有任何问题。但是,如果我连接了第二个客户端,我也可以从该客户端发送消息,但是当我尝试切换回客户端编号1时,我可以发送一个消息,然后所有客户端都无法将任何消息发送到服务器。 希望您能够理解以上内容。
我正在使用两个类(Framer类创建一个视觉对象)
服务器类
package me.quova.server;
import java.net.ServerSocket;
public class Server {
public static void main(String[] args) {
Framer.initialize();
try {
ConnectionHandler.ss = new ServerSocket(5001);
for(;;) {
ConnectionHandler.s = ConnectionHandler.ss.accept();
new Thread(new ConnectionHandler(ConnectionHandler.s)).start();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
ConnectionHandler类
package me.quova.server;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ConnectionHandler implements Runnable {
static Socket s;
static ServerSocket ss;
static DataInputStream din;
static DataOutputStream dout;
public ConnectionHandler(Socket sx) {
}
@Override
public void run() {
String msgin = "";
try {
din = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
Framer.textArea.append("\nServer socket created at port 5001");
while(true) {
msgin = din.readUTF();
Framer.textArea.append("\n"+msgin);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
编辑:我忘了显示如何发送消息,它是在Framer类中的
public static void sendText() {
try {
ConnectionHandler.dout.writeUTF(Framer.text.getText());
textArea.append("\n"+text.getText());
} catch (Exception ex) {
ex.printStackTrace();
}
}
答案 0 :(得分:0)
无论哪种方式,都感谢@MickMnemonic,我找到了一个可行的解决方案 我没有看到的另一个问题是,我试图同时使服务器成为服务器和客户端。.我最终使它成为仅服务器,在其中我完全不后悔。 当连接出现时,我删除了所有静态变量并创建了新的套接字和流。