2012-09-08 34 views
0

我只是進入了網絡信號,我想嘗試一些與執行pingPython的socket服務器只獲得一次

服務器代碼:

import socket 

host = 'localhost' 
port = 5050 
backlog = 5 
size = 1024 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog) 
while 1: 
    client, address = s.accept() 
    data = client.recv(size) 
    print "getting "+str(data)+" from "+ str(address) 

客戶端代碼

import socket 
import time 

host = 'localhost' 
port = 5050 
size = 1024 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((host,port)) 
while 1: 
    s.send('PING') 
    print "sending package" 
    time.sleep(1) 
現在

它輸出:

getting PING from ('127.0.0.1', 56580) 

只有一次,而它應該每秒得到一個PING。

我該如何解決這個問題?

回答

1

由於您只連接一個連接到您的服務器,您只需撥打.accept()一次,即可接受該連接。一旦打開,套接字將收到您從客戶端發送的定期數據包。

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog) 
client, address = s.accept() 
while 1: 
    data = client.recv(size) 
    print "getting "+str(data)+" from "+ str(address) 
+0

隨着你的代碼,我沒有收到任何 – MichaelvdNet

+0

@MichaelvdNet:你重新啓動你的客戶呢?我剛剛測試過,工作正常。我所做的只是將's.accept()'行移到循環之外。 –

+0

等待,我搞砸了,現在它工作!謝謝! – MichaelvdNet

0

那麼,你只能讀一次。無論是在服務器上的循環調用client.recv

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog) 
while True: 
    client, address = s.accept() 
    # TODO Use fork(), threading, or async I/O to for parallel processing 
    while True: 
     data = client.recv(size) 
     print "getting "+str(data)+" from "+ str(address) 

或每平創建套接字:

while True: 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((host,port)) 
    s.send('PING') 
    print "sending package" 
    time.sleep(1)