【问题标题】:Server isn't forwarding the message to the client服务器没有将消息转发给客户端
【发布时间】:2019-08-17 20:05:43
【问题描述】:

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

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

【问题讨论】:

  • without the use of threads 我认为这是问题而没有看到更多代码
  • 所以你展示了永远不会被执行的代码,而不是服务器阻塞的代码?除了告诉您问题出在该代码之外,我们显然无法帮助您。
  • readLnme()writeUTF() 不能互操作。请参阅 Javadoc。发送一行或使用readUTF() 阅读。你当然需要线程。

标签: java sockets client-server


【解决方案1】:

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

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

例如:如果您要将数据从客户端 1 发送到客户端 2,根据您的方法,您必须输入字符串 AB client2 并发送到服务器,对其进行标记化并将流程导航到客户端 2。

希望这会有所帮助!

谢谢, 阿瑞德

【讨论】:

  • 逻辑是好的。其中的错误已经被指出。问题不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2017-01-12
  • 1970-01-01
  • 2015-06-20
  • 2017-09-02
相关资源
最近更新 更多