【问题标题】:Sending more than 1 message to TCP server in same connection在同一连接中向 TCP 服务器发送超过 1 条消息
【发布时间】:2015-04-02 17:32:49
【问题描述】:

我用 Java 创建了一个 TCP 服务器,用 Ruby 创建了一个 TCP 客户端。问题是我无法在同一个连接中发送超过 1 条消息,只发送第一条消息,而没有发送另一条消息。

这里是Java代码

package com.roun512.tcpserver;

import java.io.*;
import java.net.*;

public class Program {


    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {

        String clientSentence;
        String capitalizedSentence;
        ServerSocket Socket = new ServerSocket(6789);

        while(true)
        {
            Socket connection = Socket.accept();
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream(connection.getOutputStream());
            clientSentence = inFromClient.readLine();
            System.out.println(clientSentence);
            capitalizedSentence = clientSentence + '\n';
            outToClient.writeBytes(capitalizedSentence);
            System.out.println("Sent msg");
        }
    }
}

这是客户端代码

客户端.rb

require 'socket'
class Client

        def initialize()
                server = TCPSocket.open("127.0.0.1", 6789)
                if server.nil?
                        puts "error"
                else
                        puts "connected"
                end
                server.puts("Hello\r\n")
                sleep 2
                server.puts("There\r\n")
                server.close
        end
end
Client.new()

我只收到Hello。我尝试了许多其他方法,但都没有奏效。

所以我的问题是如何在单个连接中发送超过 1 条消息,任何帮助将不胜感激:)

提前致谢!

【问题讨论】:

  • 您的服务器代码甚至不会尝试读取多个输入行。你希望它对第二行做什么?此外,TCP 流不会分解为“消息”。它是一个流,这意味着您将字节放入一端并以相同的顺序从另一端获取相同的字节,但没有消息边界的概念。
  • 我已经在使用 rcon 的战地服务器上尝试了客户端,它给出了相同的结果......所以它不是服务器。哦,服务器仅用于测试目的:)

标签: java ruby sockets tcp


【解决方案1】:

Socket.accept() 在读取第一行后等待新连接。 请尝试以下操作:

public static void main(String[] args) throws Exception {

    String clientSentence;
    String capitalizedSentence;
    ServerSocket Socket = new ServerSocket(6789);

    while (true)
    {
        Socket connection = Socket.accept();
        while(true)
        {
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream(connection.getOutputStream());
            clientSentence = inFromClient.readLine();
            System.out.println(clientSentence);
            capitalizedSentence = clientSentence + '\n';
            outToClient.writeBytes(capitalizedSentence);
            System.out.println("Sent msg");
        } 
    }
}

如果可行,请将while (true) 更改为一些有意义的条件,并且在工作完成后不要忘记关闭连接。

【讨论】:

  • 谢谢,现在我可以看到我的客户不是问题 :)
猜你喜欢
  • 2022-11-02
  • 2019-12-06
  • 1970-01-01
  • 2019-05-18
  • 2017-01-22
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
相关资源
最近更新 更多