【发布时间】:2019-08-17 20:05:43
【问题描述】:
我是 Java 套接字通信的新手,我正在尝试在不使用线程的情况下将 3 个客户端连接到服务器,因为连接到服务器的客户端数量将是 3。我在服务器标记从客户端接收到的输入并将写入发送到相应的流。但是消息没有到达服务器,所以我不确定是客户端没有写入流还是服务器无法接收数据。出于演示目的,我正在尝试在连接的客户端之间建立加密协议。
我之前使用的是BufferedReader 和PrintStream,因为我正在使用键盘输入进行测试,然后我更改为数据流似乎仍然无法正常工作
这是我在 Server.java 中转发消息的代码,控件似乎根本没有进入这个循环(不确定)。
while(true){
String recvd=cin2.readLine();
System.out.println("At server: "+recvd);
StringTokenizer st = new StringTokenizer(recvd);
String MsgToSend=st.nextToken();
String recipient=st.nextToken();
if(recipient.equalsIgnoreCase("client1")){
cout2.writeUTF(MsgToSend);
}
else if(recipient.equalsIgnoreCase("client2")){
cout.writeUTF(MsgToSend);
}
else if(recipient.equalsIgnoreCase("client3")){
cout3.writeUTF(MsgToSend);
}
}
这是我的客户端代码,
while(i==0){
String s1="A";
String s2="B";
String s3="client1";
String toSend=String.join(" ",s1+s2,s3);
System.out.println("toSend :"+toSend);
sout.writeUTF(toSend);
sout.flush();
i++;
}
接收客户,
while (true){
s=sin.readLine();
System.out.print("Server : "+s+"\n");
}
不确定是客户端无法写入还是服务器无法读取。有什么建议或解决方案来更正代码吗?
【问题讨论】:
-
without the use of threads我认为这是问题而没有看到更多代码 -
所以你展示了永远不会被执行的代码,而不是服务器阻塞的代码?除了告诉您问题出在该代码之外,我们显然无法帮助您。
-
readLnme()和writeUTF()不能互操作。请参阅 Javadoc。发送一行或使用readUTF()阅读。你当然需要线程。
标签: java sockets client-server