相关疑难解决方法(0)

Python套接字接受块 - 防止应用程序退出

我写了一个非常简单的python类,它等待socket上的连接.目的是将此类添加到现有应用程序中,并将数据异步发送到连接客户端.

问题是当等待socket.accept()时,我无法通过按ctrl-c结束我的应用程序.我也无法检测到我的课程何时超出范围并通知它结束.

理想情况下,以下应用程序应在time.sleep(4)到期后退出.正如您在下面看到的,我尝试使用select,但这也会阻止应用程序响应ctrl-c.如果我能在主方法中检测到变量'a'超出范围,我可以设置退出标志(并减少select的超时以使其响应).

有任何想法吗?

谢谢


import sys
import socket
import threading
import time
import select

class Server( threading.Thread ):
    def __init__( self, i_port ):
        threading.Thread.__init__( self )
        self.quitting = False
        self.serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
        self.serversocket.bind( (socket.gethostname(), i_port ) )
        self.serversocket.listen(5)
        self.start()

    def run( self ):
        # Wait for connection
        while not self.quitting:
            rr,rw,err = select.select( [self.serversocket],[],[], 20 )
            if rr:
                (clientsocket, address) = self.serversocket.accept()
                clientsocket.close()

def main():
    a = Server( 6543 )
    time.sleep(4)

if __name__=='__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

python sockets

8
推荐指数
1
解决办法
6118
查看次数

CTRL-C在Python中的行为有所不同

我最近开始学习Python(这里是长期的Java程序员),目前正在编写一些简单的服务器程序。问题是,对于看似相似的一段代码,Java对应部分正确响应SIGINT信号(Ctrl+ C),而Python则没有响应。当使用单独的线程生成服务器时,可以看到这一点。代码如下:

// Java code

package pkg;

import java.io.*;
import java.net.*;

public class ServerTest {

    public static void main(final String[] args) throws Exception {
        final Thread t = new Server();
        t.start();
    }

}

class Server extends Thread {

    @Override
    public void run() {
        try {
            final ServerSocket sock = new ServerSocket(12345);
            while(true) {
                final Socket clientSock = sock.accept();
                clientSock.close();
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

和Python代码:

# Python code
import threading, sys, …
Run Code Online (Sandbox Code Playgroud)

python java sockets

3
推荐指数
1
解决办法
1795
查看次数

标签 统计

python ×2

sockets ×2

java ×1