2015-09-05 77 views
1

我學習的TCPSocket,有一個簡單的服務器寫着:的Ruby的TCPSocket通信

require 'socket' 

server = TCPServer.open(2000) 

loop { 
    client = server.accept 
    p client.gets 
    client.print("bar") 
    client.close 
} 

和簡單的客戶端寫:

require 'socket' 

hostname = 'localhost' 
port = 2000 
socket = TCPSocket.open(hostname, port) 

socket.print("foo") 
p socket.gets 

當我在服務器或客戶端通信的獨立終端上運行這些一種方法(即一個「打印」和另一個「獲取」)我得到另一邊預期的字符串。當我以寫入的方式運行它們時,客戶端首先「打印」 - 向服務器發送消息,然後服務器「獲取」它然後將字符串「打印」到客戶端,它只是掛起。什麼導致這個問題?

回答

0

程序確實如下:

在客戶端和服務器之間建立連接。

客戶端側

  • 呼叫打印( 「foo」 的) - 3個完全相同字節被髮送到服務器。
  • 調用獲取 - 等待來自服務器的數據,但服務器從不發送任何數據。

服務器端

  • 呼籲得到 - 紅寶石函數獲取分析數據流,它總是返回整條生產線。但服務器只收到「foo」,它不知道它是否是整行。所以它永遠等待客戶端永遠不會發送的新行字符。