2012-10-23 26 views
0

我目前正在使用Python使用套接字。無法在使用Python的Centos中正確運行套接字程序

擔任首發,我第一次嘗試複製這個(17.2.2. Example) tutorial

給出的例子,我把客戶端,並在兩個不同的機器(當然)

現在服務器的腳本,我想試試,如果它作品,但我有點失落。

我在想連續運行服務器程序,以便它將繼續接收客戶端程序發送的數據。然而,當我試圖運行的服務器程序,它給我這個錯誤

socket.error: (99, 'Cannot assign requested address')

,當我試圖運行客戶端程序,它不給我的錯誤,但是,它打印隨機數據,這是不同的從我很期待,因爲我把字符串「Hello World」,因此即時通訊期待它會接收並打印的「Hello World」

下面顯示的是服務器程序

# Echo server program 
import socket 

HOST = '192.168.104.112'     # Symbolic name meaning all available interfaces 
PORT = 50007    # Arbitrary non-privileged port 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(1) 
conn, addr = s.accept() 
print 'Connected by', addr 
while 1: 
    data = conn.recv(1024) 
    if not data: break 
    conn.sendall(data) 
conn.close() 

和下面的一個是客戶程序

# Echo client program 
import socket 

HOST = '192.168.104.111' # The remote host 
PORT = 50007    # The same port as used by the server 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((HOST, PORT)) 
s.sendall('Hello, world') 
data = s.recv(1024) 
s.close() 
print 'Received', repr(data) 

假設在運行服務器程序的機器的IP是:192.168.104.111

,而客戶端程序爲:192.168.104.112

林真的不知道從哪裏得到的端口號所以我只是使用終端中的rpyc顯示的端口。我怎樣才能得到正確的端口號?

我知道我在這裏犯了很多錯誤。我只是不知道哪一部分。你能指出我所犯的錯誤以及如何糾正錯誤嗎?我如何運行這些程序?

順便說一句,我使用的是Centos。

+0

該端口是否未被任何其他應用程序使用?這似乎是因爲您的服務器無法綁定到該端口,而客戶端可以連接(表示有人正在監聽該端口)。使用['netstat'](http://linux.die.net/man/8/netstat)等程序確保沒有其他程序正在使用該端口。 –

回答

1

在服務器上,HOST應該是0.0.0.0或服務器的自己的 IP地址。服務器需要將其偵聽端口綁定到其自己的接口。客戶端連接到服務器。

您的客戶端程序不檢查錯誤。所以如果它不能連接到服務器,事情就會出錯。

+0

我嘗試將服務器的主機更改爲0.0.0.0/localhost /爲它自己的IP,它給了我這個錯誤socket.error:(98,'地址已經在使用') –

+0

等待大約兩分鐘或嘗試不同的端口。不要將其設置爲127.0.0.1,否則客戶端將無法連接到它。 –

+0

我嘗試打開一個新的端口,並在服務器程序的主機中使用了0.0.0.0。有用!!!謝謝! :d –

相關問題