【发布时间】:2018-01-03 10:25:48
【问题描述】:
我一直在关注 Python 中服务器和客户端通信的示例,但我无法让服务器不断侦听新消息、打印它们并将它们发送回客户端以进行打印。任何想法我做错了什么? 服务器代码:
#Imports
import socket
#Define socket address
TCP_IP = '0.0.0.0' # consider all incoming IPs
TCP_PORT = 5000 # port# communicating with the client
BUFFER_SIZE = 1024 # buffer size for receiving data
#Create socket IPv4 TCP
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Socket created"
s.bind((TCP_IP, TCP_PORT))
s.listen(20)
print "Waiting for a Cli_socket..."
#Wait for Cli_sockect
while True:
while True:
# accept Cli_sockection
Cli_sock, addr = s.accept()
print "Cli_sockected with " + addr[0] + " " + str(addr[1])
# get message from client
message = Cli_sock.recv(BUFFER_SIZE)
print message
# check that there is a message
if not message:
break
# send message to client
Cli_sock.send(message)
print "Sent message"
s.close()
print "Socket Closed"
客户端代码:
# a simple client socket
import socket
# define socket address
TCP_IP = '127.0.0.1' # ip of connecting server
TCP_PORT = 5000 # port communicating server
BUFFER_SIZE = 1024 # buffer size receiving data
# create socket IPv4 & TCP protocol
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Socket created successfully."
# connect to server
s.connect((TCP_IP, TCP_PORT))
print "Established connection with the server."
data = s.recv(BUFFER_SIZE)
while True:
print ("Message to send:")
message = raw_input()
s.send(message)
print "Message sent to server: %s." % message
print ("Message Recv:%s\n" % data)
【问题讨论】:
-
您看到的行为是什么?它怎么行不通?是否有更具体的堆栈跟踪或其他信息可以分享?
-
客户端在接收数据时卡在第 28 行,无法到达打印语句。不会发生错误。如果我在客户端的 while 循环中将 data = s.recv 放在 s.send(message) 之后,则循环发送消息但在再次到达 data = s.recv(Buffer_size) 后停止