2014-04-24 5 views
3

파이썬 2.7에서 간단한 피어 투 피어 네트워크를 만들려고합니다. 문제는 두 컴퓨터가 서버와 클라이언트의 역할을하는 두 컴퓨터간에 연결을 생성 할 수없는 것 같습니다. 하나는 서버이고 다른 하나는 클라이언트이지만 둘 다있을 때는 작동하지 않을 수 있습니다. 2 개의 소켓을 만들어야합니까? 또한 TCP를 사용하여 연결합니다.파이썬 소켓 피어 투 피어

UPDATE :

import socket, sys    # Import socket module 

s = socket.socket()   # Create a socket object 
host = socket.gethostname() # Get local machine name 
port = 12345    # Reserve a port for your service. 
s.bind((host, port))  # Bind to the port 

if sys.argv[1] == "connect": 
    host = sys.argv[2] 
    s.connect((host, port)) 
    s.close 
else: 
    s.listen(5)     # Now wait for client connection. 
    while True: 
     c, addr = s.accept()  # Establish connection with client. 
     print 'Got connection from', addr 
     c.send('Thank you for connecting') 
     c.close() 

코드 매우 좋지 않아 누군가가 인수를 사용할 필요가 클라이언트로 연결하기 때문에은 "연결"두 번째 시스템의 호스트 이름 또는 IP 하였다. 저는 두 사람이 서로 연결되어 동시에 봉사 할 수 없습니다.

+0

코드를 공유하십시오. –

+0

질문을 업데이트했습니다. 감사! – user3566150

답변

5

예, 소켓이 2 개 필요합니다. 청취 소켓은 상수 포트에서 열어야하며 클라이언트 포트는 다른 (잠재적으로 동적 인) 포트에서 열어야합니다. 일반적으로 포트 범위에서 더 높습니다. 포트

포트 1500에

서버 소켓, 클라이언트 소켓 1501

Peer1 : 192.168.1.101

Peer2 : 예를 들어 192.168.1.102

이 보이는 peer2에 연결 peer1 this : 192.168.1.101:1501 -> 192.168.1.102:1500.

peer2가 peer1에 연결되면 192.168.1.102:1501 -> 192.168.1.101:1500처럼 보입니다.

듣기 TCP 소켓은 일반적으로 차단되어 있으므로 별도의 스레드에서 실행됩니다.