我是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");
}
不确定客户端是无法写入还是服务器无法读取。有任何建议或解决方案来更正代码吗?
答案 0 :(得分:-1)
服务器文件中的套接字导航逻辑似乎很奇怪,因为您正在手动使用关键字client1创建一个字符串,然后将其标记化以进行导航。通过这种方法,您的流程将变得静态,并且协议的建立将变得困难。
请参阅: 您正在通过形成字符串AB client1将数据发送到客户端1,然后服务器文件的第一行正在使用客户端2套接字读取。 (将数据从client1套接字发送到client1套接字,不正确)。 请更改为client1套接字读取,使用prinln()和readline()发送和读取套接字数据,然后检查流程是否正常! 另外,对于协议流,您必须将数据发送到其他两个套接字,而不是发送到正在发送的套接字。
例如:如果按照方法将数据从客户端1发送到客户端2,则必须输入字符串AB client2并发送到服务器,将其标记化,然后将流程导航到客户端2。
>希望这会有所帮助!
谢谢, 埃里德