소켓을 사용하여 Python으로 다중 연결 서버를 만들지는 않습니다. 실제 프로토콜이 아니라 자체 정의 된 프로토콜을 사용합니다.로컬 클라이언트에서 내 외부 IP 주소를 사용하여 내 서버에 연결하려고하면 Errno 10060
내 로컬 IP (127.0.0.1)를 사용하는 서버가 올바르게 작동하지만 친구가 연결되기를 원하지만이 오류가 계속 발생합니다. [Errno 10060] 연결된 당사자가 제대로 연결되지 않아 연결 시도가 실패했습니다 일정 기간 후에 응답하거나 연결된 호스트가 응답하지 않아 연결이 실패했습니다.
포트를 올바르게 열고 ipconfig에 지정된 ip로 서버 ip를 설정했습니다. 내가 뭔가를 놓치고 있거나 뭐라도 잘못하고있는 걸까요?
def initialize():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Setup a server socket
server_port = raw_input("Enter the port to run the server on\n") # Ask the admin for port
while server_port.isdigit() is not True:
server_port = raw_input("Enter the port to run the server on\n")
server_socket.bind((LOCAL_IP, int(server_port))) # Bind the server socket to this computer
inputs.append(server_socket)
terminated = False
while not terminated:
readable_sockets, writable_sockets, error_sockets = select.select(inputs, outputs, []) # check which of the
handle_inputs(readable_sockets, server_socket)
handle_messages(writable_sockets) # this works on my local ip server
# sockets we expect to use are actually free
def handle_inputs(readable_sockets, server_socket):
"""
This functions purpose is to read all inputs given by users, and create new requests accordingly
:param readable_sockets: a list of sockets which are waiting to be read
:param server_socket: the socket of the server
"""
for cur_socket in readable_sockets:
if cur_socket is server_socket:
new_socket, new_ip = server_socket.accept(1)
answers_queue.append(Answer(new_socket, Answer.HND_TYPE, 9, "handshake"))
if new_socket not in outputs:
outputs.append(new_socket)
이이 relvent 클라이언트 코드는 다음과 같습니다 :
def main():
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.connect((EXTERNAL_IP, PORT))
data = my_socket.recv(1)
if data == 'H':
print my_socket.recv(int(my_socket.recv(2)))
else:
print "ERRRRRRRRRRRRRRRRR"
무엇이'LOCAL_IP'입니까? – Daniel
코드가 깨졌습니다.'recv'는 정확히이 숫자가 아닌 주어진 바이트 수만큼 읽습니다. – Daniel
@Daniel, recv는 내가 작성한 프로토콜을 사용합니다. 그 이유는 하드 코딩 된 번호입니다. 로컬 연결로 작동합니다. –