2017-07-27 63 views
0

我一直在Python的服务器和客户端通信的例子,但我不能让服务器不断地收听新消息,打印它们并发回给客户端打印它以及。任何想法我做错了什么? Server代码: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) 
+0

你看到了什么行为?它怎么不工作?是否有堆栈跟踪或其他信息可供分享? – thaavik

+0

客户端遇到数据接收的第28行,并没有进入打印语句。没有错误发生。如果我在客户端的while循环中将s.send(message)后面的data = s.recv,循环发送消息,但在达到data = s.recv(Buffer_size)后停止 – Alex

回答

0

您的服务器从客户端发送任何数据之前等待数据:

Cli_sock, addr = s.accept() 
print "Cli_sockected with " + addr[0] + " " + str(addr[1]) 
# get message from client 
message = Cli_sock.recv(BUFFER_SIZE) 

您的客户端从服务器等待数据发送之前:

s.connect((TCP_IP, TCP_PORT)) 
print "Established connection with the server." 
data = s.recv(BUFFER_SIZE) 

因此,双方都在等待对方发送数据,但没有人会这样做。这就是它挂起的原因。

+0

这样做,然后找到出了Cli_sock,addr = s.accept()在server.py中的第二次循环后崩溃了代码。它现在有效。 – Alex