python socket:服务器必须在recv之前发送消息

时间:2016-07-13 07:15:27

标签: python sockets

在socket中,我发现如果服务器在调用recv()之前没有发送任何消息,服务器将没有响应,无论是否使用mutilthread。 如下图所示:

enter image description here

enter image description here

server.py(使用SocketServer模块):

def handle(self):
    conn = self.request
#    conn.send('Welcome to server')
    flag = True
    while flag: 
        data = conn.recv(1024)
        print 'client:' + data
        if data == 'exit':
            flag = False
        conn.send('AAAAAA')
    conn.close()

client.py:

client = socket.socket()
ip_port = ('127.0.0.1', 11111)
client.connect(ip_port)

while True:
    data = client.recv(1024)
    print 'server:' + data
    send = raw_input('client:')
    client.send(send)
    if send == 'exit':
        sys.exit()

如果你能帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:0)

# server.py
import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print "Server received data:", data
    conn.send("Data received at server side") 
conn.close()
# client.py
import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello World!"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
print "Client: " + MESSAGE
data = s.recv(BUFFER_SIZE)
s.close()

print data

我认为提供示例代码可以说明问题。

# Expected input:
python server.py
python client.py

# Expected output:
# (server output)
Connection address: ('127.0.0.1', 62136)
Server received data: Hello World!
# (client output)
Client: Hello World!
Data received at server side

您可以通过比较代码(例如bind())找出丢失的组件。 希望它有所帮助。 参考本网站:https://wiki.python.org/moin/TcpCommunication