Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 同一台计算机上的多个套接字线程_Python_Multithreading_Sockets - Fatal编程技术网

Python 同一台计算机上的多个套接字线程

Python 同一台计算机上的多个套接字线程,python,multithreading,sockets,Python,Multithreading,Sockets,我正在学习Python上的多线程和套接字,但遇到了一个问题。我正在尝试创建一个服务器,它将从同一台计算机上的多个客户端接收和打印数据。以下是迄今为止我的服务器代码: import socket import threading def conn(HOST, PORT, BUFSIZE): serversock = RecvConnection(HOST, PORT) serversock.listen(BUFSIZE) class RecvConnection(object

我正在学习Python上的多线程和套接字,但遇到了一个问题。我正在尝试创建一个服务器,它将从同一台计算机上的多个客户端接收和打印数据。以下是迄今为止我的服务器代码:

import socket
import threading

def conn(HOST, PORT, BUFSIZE):
    serversock = RecvConnection(HOST, PORT) 
    serversock.listen(BUFSIZE)

class RecvConnection(object):

    def __init__(self,host, port, sock=None):
        if sock == None:
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        else:
            self.sock = sock

        self.sock.bind((host, port))    

    def listen(self, buffsize):
        self.sock.listen(5)
        clisock, (remhost, remport) = self.sock.accept()
        while 1:
            print clisock.recv(buffsize)

HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024


threading.Thread(target=conn, args=(HOST, PORT, BUFSIZ,)).start()
问题是,我的服务器似乎只处理我的客户机文件的一个实例,因此它只显示我的客户机的第一个实例发送的数据。这是我的客户代码:

import socket
import threading

class CreateConnection(object):

    def __init__(self, sock=None):
        if sock is None:
            # Create a socket
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        else:
            self.sock = sock

    def connect(self, host, port):
        # Connect to host, port
            self.sock.connect((host, port))

class Communication(CreateConnection):

    def sendMsg(self, msg):
        self.sock.send(msg)

HOST = 'localhost'
PORT = 21567

cltsock = Communication()
cltsock.connect(HOST, PORT)
while 1:
    msg = raw_input('> ')
    cltsock.sendMsg(msg)
有人能帮我做到这一点吗?
谢谢

当服务器接受来自客户端的连接时,它应该启动一个线程来处理该连接,然后循环等待下一个客户端

[编辑]

这里有一个例子来说明我的意思:

def listen(self, buffsize):
    self.sock.listen(5)

    while True:
        # Listen for a new client.
        clisock, (remhost, remport) = self.sock.accept()

        # Start listening to the new client.
        t = threading.Thread(target=self._handle_client, args=(clisock, buffsize))
        t.start()

def _handle_client(self, clisock, buffsize):
    while True:
        received = clisock.recv(buffsize)
        if not received:
            # The client has closed the connection.
            break

        print received

这就是我一直试图用我的线程。线程线。。。我试着把它放在一段时间内,但我们只能说它让我看到了一个非常错误的东西:PYour提议工作得非常好,很抱歉耽搁了!谢谢。但是,如果有人尝试,请不要忘记在线程行的末尾添加.start()。我已经添加了缺少的
.start()