socket.send只在一个echo客户端的python代码中工作一次

4 python sockets network-programming

我有一个echo客户端的代码,它使用套接字连接将数据发送到echo服务器:

echo_client.py

import socket

host = '192.168.2.2'
port = 50000
size = 1024

def get_command():
    #..Code for this here

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
while 1:
    msg = get_command()
    if msg == 'turn on':
        s.send('Y')
    elif msg == 'turn off':
        s.send('N')
    elif msg == 'bye bye':
        break   
    else:
        s.send('X') 
    data = s.recv(size)
    print 'Received: ',data

s.close()
Run Code Online (Sandbox Code Playgroud)

echo_server.py

import socket 

host = '' 
port = 50000 
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) 
    if data: 
        client.send(data) 
client.close()
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,在客户端s.send中只有第一次工作,即使它处于无限循环中.在第一次发送/接收完成后的某个时间,客户端崩溃,连接超时.

为什么s.send只工作一次?我如何在我的代码中解决这个问题?

请帮助谢谢

Dav*_*rtz 5

您的服务器代码只调用recv一次.accept如果你只想接收一个连接,你应该调用一次,但是你需要循环调用recvsend.