두 대의 컴퓨터간에 채팅 프로그램을 만들고 싶습니다. 나는 컴퓨터에 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