2013-04-06 4 views
0

연결할 수 없습니다소켓이 질문

가 어떻게 내 프로그램이 소켓이 항상 연결되도록 그것을 만들 해결할 수 있습니까? 또한 코드를 테스트하십시오. 나는 이것에 대해 많은 해답을 보았지만 아무도 일 해왔다.

도움을 주셔서 대단히 감사합니다.

잠시 동안

배경은, 내가 LAN을 통해 메시지를 보낼 수있는 프로그램을 일했다. 나는이 프로젝트에서 GUI와 소켓에 대한 지식을 통합하려고 노력했다. 그러나, 내가 무엇을해도 상관없이 소켓은 연결 상태를 유지할 수 없습니다.

I have asked many questions about this 그러나 정확한 픽스를 발견하지 못했습니다. 나는 이것이 내 잘못이라고 생각한다. 나는 스스로 가르치고 있으며 아마도 정확한 질문을하지 않았다. 이번에는 담요 진술을 선택했습니다. 기교에 대한 나의 부족을 용서해 주시길 바랍니다. 그러나 이것은 현재 로선 가장 좋은 방법 인 것 같습니다. Here is a link to my code on paste bin. 아래에서 가장 문제가되는 부분을 포함 시켰습니다.

오류 메시지로

('localhost', 1234) 
Socket created 
Socket bind complete 
Socket now listening 
Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1410, in __call__ 
    return self.func(*args) 
    File "/Volumes/XXMBABANEXX'S USB/Python Programs/Sockets/IM Project/Server/Functions/Simple Server.py", line 148, in <lambda> 
    command = lambda: send_msg(s,message)) 
    File "/Volumes/XXMBABANEXX'S USB/Python Programs/Sockets/IM Project/Server/Functions/Simple Server.py", line 82, in send_msg 
    conn.sendall(my_message) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
error: [Errno 57] Socket is not connected 

관련 코드

오류 메시지가 내 send_msg 기능은 문제가, 내가 아래에 포함하기로 결정했습니다 데 있다고 말한다.

def send_msg(conn, message): 

    """Send Messages""" 
    #Send some data to the remote server 
    my_message = message.get("0.0", END) 


    #set the whole string 
    conn.sendall(my_message) 

많은 도움을 주셔서 감사합니다. 이 문제는 몇 달 동안 저를 괴롭 히고 있습니다.

+0

저는 Python 2.7.3을 사용 중이며 Mac OSX – xxmbabanexx

답변

3

크롤링 방법을 알기 전에 실행하려고합니다.

Tk를 버리고 실을 꿰기십시오. SocketServer 예제를보고 실행하십시오. 그로부터 작업하여 부족한 것으로 보이는 기본 소켓을 이해할 수있게하십시오.

StackOverflow 사람들은 귀하의 pastebin 코드를 보지 않을 것입니다. 나는 그것을 보았고 그것은 중복되고 혼란 스럽다.

0

데이터를 잘못된 소켓으로 보내고 있습니다. 수신 소켓이 아닌 클라이언트 소켓으로 보내야합니다. 서버의 일반적인 패턴은 다음과 같습니다.

# Set up the listening socket 
listen_socket = socket.socket(...) 
listen_socket.bind(...) 
listen_socket.listen(...) 

# Accept connections and process them 
while should_continue_running: 
    client_socket, client_addr = listen_socket.accept() 

    # All communication with the new client should now happen on client_socket, 
    # NOT on listen_socket: 
    client_socket.recv(...) 
    client_socket.send(...) 
    ... 

    client_socket.close() 
2

클라이언트와 서버에 대해 별도의 파이썬 파일을 작성하는 것으로 시작합니다. 공통 기능을 공유하려고한다면 common.py 파일을 작성하고 둘 다 가져올 수 있습니다.

붙여 넣기 - bin 코드를 탐색 한 후 내가 볼 수있는 가장 큰 오류는 SERVER_LOOP 함수를 호출하지 않는 것입니다.

라인 (90)에

, 추가 스레드 (대상 = SERVER_LOOP, 인수의 = (들)). (시작) #START 서버 스레드

둘째, 당신은 91에서 만든 스레드 후 즉시 종료 예정 client.send()를 수행합니다.파이썬 가비지 콜렉션은 소켓 생성 방법에 상관없이 소켓을 찢어 버릴 것입니다. 1 == 1 : loop

파이썬 TCP 클라이언트와 서버를 만드는 좋은 예제 코드를 찾을 것을 강력히 권장합니다. 파이썬에서. 다음은 좋은 시작입니다. http://wiki.python.org/moin/TcpCommunication