2015-04-02 66 views
1

我已经在Java中创建了TCP服务器,并在Ruby中创建了TCP客户端。问题是我无法在同一连接中发送超过1条消息,只发送第一条消息,而另一条消息未发送。向同一连接中的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"); 
     } 
    } 
} 

这里是客户端代码

Client.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条消息,任何帮助,将不胜感激:)

提前感谢!

+4

您的服务器代码甚至不会尝试读取多个输入行。你期望它对第二行做什么?而且,TCP流不会被分解为“消息”。这是一个流,这意味着你将字节放在一端,并按照相同的顺序从另一端获取相同的字节,但是没有消息边界的概念。 – 2015-04-02 02:38:51

+0

我试过战地服务器上使用rcon的客户端,它给出了相同的结果......所以它不是服务器。哦,服务器仅用于测试目的:) – roun512 2015-04-02 02:47:58

回答

4

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)一些有意义的条件和`吨fotget工作完成后,关闭连接。

+0

谢谢,现在我可以看到我的客户端不是问题:) – roun512 2015-04-02 18:03:10

相关问题