2017-07-27 11 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行目で立ち往生し、printステートメントには到達しません。エラーは発生しません。クライアントのwhileループでs.send(メッセージ)の後に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のループを2回目にしてコードをクラッシュさせました。それは今働く。 – Alex