Python套接字服务器 - 继续接收客户端数据
我想知道怎么让一个Python的socket服务器在有连接时告诉我,然后继续给我返回客户端发送的数据。现在我做的时候,它连接上后就一直重复告诉我连接成功,没完没了。
我只想让它连接上,然后不断检查(或者获取)发送到服务器的数据。
另外,我怎么知道客户端是否断开了连接呢?
address = ('', 7777)
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
try:
server_socket.bind(address)
except Exception, e:
print colored("Address already in use", 'red')
server_socket.listen(2)
print colored("Socket ready", 'blue')
while True:
client_socket, addr = server_socket.accept()
hostIP = addr[0]
port = addr[1]
try:
host = gethostbyaddr(hostIP)[0]
except:
host = hostIP
print colored("Got connection from: " + host, 'blue')
try:
recv_data = server_socket.recv(2048)
print("Got: " + recv_data)
except:
print "nothing"
recv_data = "" # this is because I test what it is later, but that's irrevlevant.
谢谢
1 个回答
0
你没有对 client_socket
做任何处理;也就是说,实际的客户端连接没有被使用。此外,服务器无法知道客户端想发送多少数据,因此它必须持续(也就是在一个循环中)接收数据。当连接发送“空”的数据时,连接就会被终止,服务器会回到监听状态。如果你想让服务器接受新的连接,并继续接收来自现有连接的数据,可以查一下 threading
模块。
import socket
address = ('', 7777)
server_socket = socket.socket(AF_INET, SOCK_STREAM)
server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
try:
server_socket.bind(address)
except Exception, e:
print colored("Address already in use", 'red')
server_socket.listen(2)
print colored("Socket ready", 'blue')
while True:
client_socket, addr = server_socket.accept()
hostIP = addr[0]
port = addr[1]
try:
host = gethostbyaddr(hostIP)[0]
except:
host = hostIP
print colored("Got connection from: " + host, 'blue')
while True:
try:
recv_data = client_socket.recv(2048)
if not recv_data:
break
print("Got: " + recv_data)
except socket.error, e:
print "nothing"
recv_data = "" # this is because I test what it is later, but that's irrevlevant.