服务器未将邮件转发到客户端

时间:2019-08-17 20:05:43

标签: java sockets client-server

我是Java套接字通信的新手,我试图在不使用线程的情况下将3个客户端连接到服务器,因为连接到该服务器的客户端数量将为3。服务器标记从客户端接收到的输入,并将写入发送到相应的流。但是消息未到达服务器,因此我不确定客户端是否未写入流还是服务器无法接收数据。我正试图在连接的客户端之间建立加密协议,以进行演示。

自从我通过键盘输入进行测试以来,我早先使用过BufferedReaderPrintStream,后来我改成了数据流,似乎还是行不通的

在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");
}

不确定客户端是无法写入还是服务器无法读取。有任何建议或解决方案来更正代码吗?

1 个答案:

答案 0 :(得分:-1)

服务器文件中的套接字导航逻辑似乎很奇怪,因为您正在手动使用关键字client1创建一个字符串,然后将其标记化以进行导航。通过这种方法,您的流程将变得静态,并且协议的建立将变得困难。

请参阅: 您正在通过形成字符串AB client1将数据发送到客户端1,然后服务器文件的第一行正在使用客户端2套接字读取。 (将数据从client1套接字发送到client1套接字,不正确)。 请更改为client1套接字读取,使用prinln()和readline()发送和读取套接字数据,然后检查流程是否正常! 另外,对于协议流,您必须将数据发送到其他两个套接字,而不是发送到正在发送的套接字。

例如:如果按照方法将数据从客户端1发送到客户端2,则必须输入字符串AB client2并发送到服务器,将其标记化,然后将流程导航到客户端2。

>

希望这会有所帮助!

谢谢, 埃里德