【发布时间】:2016-02-09 15:01:19
【问题描述】:
我所有的客户端套接字都做同样的事情:每秒发送一个包(22 字节)
服务器代码如下:
import select
import socket
import datetime
SList = []
class Tserver:
def __init__(self, portNum):
host = '127.0.0.1'
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server.bind((host, portNum))
self.server.listen(1)
def GETPACK():
# function for CRC check
def CRC(DATA_STR):
return 1
# generate 100 sockets to listen
for x in range(100):
SList.append(Tserver(x+10000))
inputs = []
# put in inputs
for x in range(100):
inputs.append(SList[x].server)
while(True):
ready_socks, _, _ = select.select(inputs, [], [])
for sock in ready_socks:
c, addr = sock.accept()
while(True):
data = c.recv(22)
if len(data) == 22: # To make sure the data-length is 22
# Turn the pack string into bytearray
data_bytes = bytearray()
data_bytes.extend(data)
if CRC(data_bytes) == 1:
print "Connected from client IP Address:" + str(addr)
# ID
ID = 256*data_bytes[1] + data_bytes[2]
print "ID: ", ID
now = datetime.datetime.now()
print "now: ", str(now)
if __name__ == "__main__":
GETPACK()
我的服务器只能打印第一个连接的套接字发送的包。 我的问题是如何在将包发送到服务器时打印出每个端口的所有消息。
【问题讨论】:
-
您是否尝试调试过您的代码?
-
套接字不能这样工作。您应该重新阅读我相信的套接字文档。您只需创建一个套接字来侦听一个端口,然后
accept将为每个连接返回一个新创建的套接字。 -
@peterh 不是真的,我还在努力。需要一些好的建议。