2013-02-09 2 views
0

서버에 an example을 사용하려하지만 클라이언트는 하나의 메시지 만 보낼 수 있으며 서버는 번호로 응답합니다.몇 가지 대답으로 일반적인 파이썬 소켓 질문

다음은 코드입니다.

import socket 
mySocket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) 
mySocket.bind (('', 2000)) 
mySocket.listen (1) 
while True: 
    channel, details = mySocket.accept() 
    print 'We have opened a connection with', details 
    print channel.recv (100) 
    channel.send ('Green-eyed monster.') 
    channel.close() 

질문 : 왜 클라이언트가 서버에 메시지를 보낼 때마다, 그것은 숫자로 응답하도록

  1. 입니까?

  2. LAN을 통하지 않고 인터넷을 통해 소켓을 사용할 수있는 방법은 무엇입니까?

  3. 소켓을 사용하여 클라이언트에서 클라이언트로 데이터를 이동시키는 방법이 있습니까? IM 프로그램과 다소 비슷합니다.

  4. 내가 가장 가능성이 호스트가 내 Mac에서 내 친구들이 IM 서버 것 - 그것은

  5. 이 사용하기 좋은 도서관이 있습니까 OS의 (맥, PC) 사이에 작동합니까? (나는 HTTP가 훌륭하다고 들었습니다)

  6. 이 코드 줄은 입니다. 실제로는입니다. 어떻게 작동합니까? 나를 이해하는 좋은 튜토리얼입니다

    Traceback (most recent call last): 
    File "C:\Users\****\Desktop\Python\Sockets\First Server\server.py", 
    line 3, in <module> 
    mySocket.bind (('', 2003)) 
    File "C:\Python27\lib\socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
    error: [Errno 10048] Only one usage of each socket address 
    (protocol/network address/port) is normally permitted 
    
  7. 마지막 : 나는 (빨간색 X를 사용하여) 서버를 닫고 포트를 재사용 할 때

    또한
    print channel.recv (100) 
    channel.send ('Green-eyed monster.') 
    
  8. ,,이 말한다 이게 뭐야?

같은 게시물에 너무 많은 질문 죄송합니다

,하지만 난 this을 게시 this명 다른 문제와 유사한 문제에 대해 게시 나와 함께 화가 왔을 때.

파이썬 버전 : 파이썬 2.7.3

답변

0

나는 (이상 몇 시간) 몇 가지 조사를 수행하고 내 문제에 어떤 해결책을 발견했다!

3 : 예, 클라이언트가 서로 통신하도록하는 방법이 있습니다. 서버를 사용해야합니다. 서버 측에서 무한 루프를 초기화해야 데이터가 수신되어 전송됩니다.

while True: 
     #Receiving from client 
     data = conn.recv(1024) 
     if not data: 
      break 
     conn.sendall(data) 
     print data 
     #To come out of the loop 
    conn.close() 

이 프로그램은 고객과의 모든 연결을 초기화 clientthread라는 정의의 일부입니다 : 이것은 내가 문제를 해결하는 방법입니다. 은 "실제"루프는 스레드의 나머지 부분을 수행하는 경우 :

 while True: 
     #Wait to accept a connection - blocking call 
     conn, addr = s.accept() 
     #display client information (IP address) 
     print 'Connected with ' + addr[0] + ':' + str(addr[1]) 

     #Start new thread takees 1st argument as a function name to be run, second 
     #is the tuple of arguments to the function 

     start_new_thread(clientthread ,(conn,)) 

4 : 예, 그것은 운영 체제의 사이에서 작동합니다.소켓은 플랫폼의에 독립적입니다.

6 : 코드 줄은 실제로 매우 간단합니다. print channel.recv (100) 줄은 서버에 사용자 입력을 최대 100 자까지 인쇄하도록 지시합니다. 다음 줄인 channel.send ('Green-eyed monster.')은 서버에 클라이언트에게 Green-eyed monster이라는 메시지를 보냅니다.

7 : 포트 당 두 개 이상의 소켓을 열 수 없기 때문에이 오류가 발생합니다. 코드 끝에서 s.close() 또는 sys.exit()과 같은 줄을 사용하여 포트를 닫는 것이 좋습니다. 아니면 단순히 다른 것을 고를 수 있습니다!

8 : 인터넷에서 훌륭한 자습서가 있습니다. 소켓의 기초를 가르쳐주는 것은 this입니다. 텔넷은 나에게 정말 혼란 스러웠다. 따라서 this 클라이언트와 함께 클라이언트가 훨씬 더 나은 맞춤형 클라이언트를 만들 수 있음을 발견했다.

질문이 있으시면 언제든지 말씀해 주시면 답변 드리겠습니다.