0

我刚刚进入网络,我想尝试使用 ping

服务器代码:

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。

我怎样才能解决这个问题?

4

2 回答 2

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)
于 2012-09-08T19:49:06.503 回答
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)

或为每个 ping 创建一个套接字:

while True:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host,port))
    s.send('PING')
    print "sending package"
    time.sleep(1)
于 2012-09-08T19:49:30.133 回答