2014-09-17 3 views
4

서버 (파이썬으로 작성된 것)의 간단한 소켓과 연결되는 Python 클라이언트를 작성하고 있습니다. 나는 서버에서 연결이 거부되었을 때 클라이언트 종료를 막고 싶다. 다시 말해, 30 초마다 서버에 대한 클라이언트의 "검색"(연결이없는 경우)을 만들고 싶습니다.'연결 거부 됨'오류로 인해 응용 프로그램이 닫히지 않도록하십시오.

여기에 내가 작성한 코드가 있지만 연결이 서버에서 종료되면 클라이언트는 거부 된 연결에 대한 오류를 반환하고 자체를 종료합니다.

코드 :

#!/usr/bin/python 

import socket 
import time 

while True: 

    sock = socket.socket() 
    host = socket.gethostname() 
    port = 4444 
    conn = sock.connect((host,port)) 

    while(conn != None): 
     print 'Waiting for the server' 
     time.sleep(30) 
     sock = socket.socket() 
     host = socket.gethostname() 
     port = 4444 
     conn = sock.connect((host,port)) 

    while True: 

     recv_buf = sock.recv(1024) 

     if (recv_buf == 'exit'): 
      break 

     print(recv_buf) 
     sock.send('hi server') 

오류 :

Traceback (most recent call last): File "s_client.py", line 12, in 

conn = sock.connect((host,port)) File "C:\Program Files\python27\lib\socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 10061] ─ίΊ ▐ΪάΊ ϊΫΊάΪ▐ ύ ϊύΉώΎΫ±ή▀ά ≤²Ίϊί≤ύ≥,

그래서 클라이언트를 종료 할 수 있지만, 지속적으로 서버를 찾을 수 있도록하지 데 도움이되는 아이디어, 환영합니다. 사용 try

답변

2

-except :

conn = None 
while(conn == None): 
    sock = socket.socket() 
    host = socket.gethostname() 
    port = 4444 
    try: 
     conn = sock.connect((host,port)) 
    except: 
     print 'Waiting for the server' 
     time.sleep(30) 

그것은 초기 connect 전화를 피하고 while 루프에만 connect을 통해 연결을 수행하는 것이 좋습니다. sleep 전화를 except 부분으로 이동하는 것과 같은 몇 가지 다른 변경 사항도 있습니다.

+1

OP도 12 줄을 없애고이 루프 외부에 conn = None을 설정하면 우아 할 것이고 매번 "대기"가 인쇄 될 것이고 (매번 대기하기 때문에) 중복 시도를 피할 것입니다 -except 절. 그대로, 첫 번째 연결이 실패 할 때이 대답은 여전히 ​​종료됩니다. 덕분에 – GreenAsJade

+0

! 그 답변에 – rjv

+0

대단히 감사합니다 추가! –

관련 문제