7

问题

  1. 异常的原因是什么?

  2. 客户端是否导致任何错误?

  3. 如果可能,请解释其他错误。

背景

我正在创建一个 Python GUI 套接字服务器。当客户端连接到我的服务器时,GUI 窗口将打开(我仍在处理此问题)。但是,当客户端连接时,我收到一个错误:

Unhandled exception in thread started by <function clientthread at 0x10246c230>

由于实际脚本相当长,我提供了一个 pastebin 链接。

这是线程代码。s是我的socket对象的名称。

def clientthread(s):

    #Sending message to connected client
    #This only takes strings (words
    s.send("Welcome to the server. Type something and hit enter\n")

    #loop so that function does not terminate and the thread does not end
    while True:

        #Receiving from client
        data = s.recv(1024)
        if not data:
            break
        s.sendall(data)
        print data
    s.close()

追溯

感谢莫腾的建议。这是追溯。

Socket Created
Socket Bind Complete
Socket now listening
Connected
Traceback (most recent call last):
  File "/Users/BigKids/Desktop/Coding/Python 2/Sockets/Function/Server GUI Alpha Function.py", line 80, in clientthread
    s.send("Welcome to the server. Type something and hit enter\n")
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 170, in _dummy
    raise error(EBADF, 'Bad file descriptor')
error: [Errno 9] Bad file descriptor

就个人而言,我相信许多错误是由于 GUI 造成的。

谢谢!

4

1 回答 1

3

一方面,您可以捕获异常,打印它并查看它是什么:)

这样做,例如通过用 try/except 子句包围它并打印发生的任何异常。

def clientthread(s):
    try:
        #Sending message to connected client
        #This only takes strings (words
        s.send("Welcome to the server. Type something and hit enter\n")

        #loop so that function does not terminate and the thread does not end
        while True:

            #Receiving from client
            data = s.recv(1024)
            if not data:
                break
            s.sendall(data)
            print data
        s.close()
    except Exception:
        import traceback
        print traceback.format_exc()

我猜这是客户端断开连接的原因。这将导致异常,您应该适当地处理它。如果客户端可以通过多种方式断开连接。通过告诉您,通过超时,在您尝试发送某些内容时断开连接等。所有这些情况都是合理的异常情况,您应该测试并处理它们。希望这将帮助您继续前进,如果没有,请发表评论:)

于 2013-03-30T21:47:30.863 回答