Python套接字服务器 - 继续接收客户端数据

-2 投票
1 回答
2125 浏览
提问于 2025-04-18 06:04

我想知道怎么让一个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.

撰写回答