2014-03-13 1 views
0

두 대의 컴퓨터간에 채팅 프로그램을 만들고 싶습니다. 나는 컴퓨터에 IP 주소 192.168.0.5을 가지고 하나, 나는 성공적으로 기계 두에서 응답 메시지를 전송 한 후 기계 192.168.0.2로 메시지를 보낼 수 있습니다 기계 을 사용하고 1소켓에서 파이썬 사용

그러나 나는 IP 주소가 이미 사용 중이거나 연결이 거부되었다고 주장하면서 두 컴퓨터에서 보내는 두 번째 시도에서 문제가 발생했다는 것을 알았습니다 (두 번째로 보내기 전에 응답을 보냄) 정의 된 수의 선택 사항을 보낼 수 있도록 변경 되었습니까?

다음 코드는 여러 메시지를 보내고받는 가장 효율적인 방법이 아니므로 for 루프에 대한 설명이됩니다. 예 : for sendAndRecieve in range(0,5).

스위치를 통해 실행되는 이더넷 케이블을 사용하여 두 대의 컴퓨터가 연결되고 코드가 동시에 실행됩니다.

기계 1 개 코드 :

#Sending first message 

host = "192.168.0.5" 
port = 4446 
from socket import * 
s = socket(AF_INET, SOCK_STREAM) 
s.bind((host,port)) 
s.listen(1) 
print("listening") 
q,addr = s.accept(1024) 
data = "This is the first message I am sending" 
data = data.encode("utf-8") 
q.send(data) 
s.close 

#Recieving response message 1 

while True: 
    try: 
     host = "192.168.0.2" 
     port = 4446 
     from socket import* 
     s = socket(AF_INET, SOCK_STREAM) 
     s.connect((host,port)) 
     msg = s.recv(1024) 
     msg = msg.decode("utf-8") 
     print(msg) 
     s.close() 
    except: 
     pass 

#Sending second message this is where the problem happens 

host = "192.168.0.5" 
port = 4446 
from socket import * 
s = socket(AF_INET, SOCK_STREAM) 
s.bind((host,port)) 
s.listen(1) 
print("listening") 
q,addr = s.accept(1024) 
data = "This is the first message I am sending" 
data = data.encode("utf-8") 
q.send(data) 
s.close 

기계 2 코드 : 코드를 읽기

#Recieving message 1 

while True: 
    try: 
     host = "192.168.0.5" 
     port = 4446 
     from socket import* 
     s = socket(AF_INET, SOCK_STREAM) 
     s.connect((host,port)) 
     msg = s.recv(1024) 
     msg = msg.decode("utf-8") 
     print(msg) 
     s.close() 
    except: 
     pass 

#Sending first message 

host = "192.168.0.2" 
port = 4446 
from socket import * 
s = socket(AF_INET, SOCK_STREAM) 
s.bind((host,port)) 
s.listen(1) 
print("listening") 
q,addr = s.accept(1024) 
data = "This is the first message I am sending" 
data = data.encode("utf-8") 
q.send(data) 
s.close 

#Recieving response message 1 this is where the problem happens 

while True: 
    try: 
     host = "192.168.0.25" 
     port = 4446 
     from socket import* 
     s = socket(AF_INET, SOCK_STREAM) 
     s.connect((host,port)) 
     msg = s.recv(1024) 
     msg = msg.decode("utf-8") 
     print(msg) 
     s.close() 
    except: 
     pass 

답변

0

, 나는 루프 이제까지 컴퓨터에서 데이터를 수신하는 일을 그만 반면 방법 기계 2 년대 표시되지 않습니다 1 (오류가 발생한 경우 이외에는 루프가 중단되지 않습니다.) 머신 1은 머신 2가 처음으로 연결 한 후에 계속 작동하지만 머신 2가 머신 1에 연결하려고 시도하는 동안 머신 2에 연결을 시도합니다. 이는 아마도 사용자가보고있는 오류의 원인 일뿐입니다. 첫 번째로 보내거나받은 메시지.

관련 문제