创建多线程tcp服务器python 3
您好,我尝试制作一个同时接受多个客户端的简单服务器。我是python新手,很难理解……我尝试在多线程应用程序中更改代码,但没有取得积极的结果……以下是代码:创建多线程tcp服务器python 3,python,multithreading,sockets,Python,Multithreading,Sockets,您好,我尝试制作一个同时接受多个客户端的简单服务器。我是python新手,很难理解……我尝试在多线程应用程序中更改代码,但没有取得积极的结果……以下是代码: import socket, threading def message(): while 1: data = connection.recv(1024) if not data: break #connection.sendall(b'-- Message Received --\n
import socket, threading
def message():
while 1:
data = connection.recv(1024)
if not data: break
#connection.sendall(b'-- Message Received --\n')
print(data.decode('utf-8'))
connection.close()
def connection():
address = input("Insert server ip")
port = 44444
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((address, port))
s.listen(1)
print("Server started! Waiting for connections...")
def accept connection():
connection, address = s.accept()
print('Client connected with address:', address)
t=thread.Threading(target=message,args=(connection))
t.run()
我知道有很多错误,但我是python新手抱歉:(
原始的非线程代码是:
import socket
address = input("Insert server ip:")
port = 44444
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((address, port))
s.listen(1)
print("Server started! Waiting for connections...")
connection, address = s.accept()
print('Client connected with address:', address)
while 1:
data = connection.recv(1024)
if not data: break
#connection.sendall(b'-- Message Received --\n')
print(data.decode('utf-8'))
connection.close()
下面是一些示例代码,显示了一个螺纹套接字连接
def sock_connection( sock, host ):
"Handle socket"
pass
while 1:
try:
newsock = sock.accept()
thread = Thread( target=sock_connection, args=newsock )
thread.start()
except Exception, e:
print "error on socket connection: " % e)
下面是一些示例代码,显示了一个螺纹套接字连接
def sock_connection( sock, host ):
"Handle socket"
pass
while 1:
try:
newsock = sock.accept()
thread = Thread( target=sock_connection, args=newsock )
thread.start()
except Exception, e:
print "error on socket connection: " % e)
下面是一些示例代码,显示了一个螺纹套接字连接
def sock_connection( sock, host ):
"Handle socket"
pass
while 1:
try:
newsock = sock.accept()
thread = Thread( target=sock_connection, args=newsock )
thread.start()
except Exception, e:
print "error on socket connection: " % e)
下面是一些示例代码,显示了一个螺纹套接字连接
def sock_connection( sock, host ):
"Handle socket"
pass
while 1:
try:
newsock = sock.accept()
thread = Thread( target=sock_connection, args=newsock )
thread.start()
except Exception, e:
print "error on socket connection: " % e)
你的基本设计很接近,但你有很多小问题,很难向前推进 首先,函数名中有一个空格,这是不允许的。还有一个
IndentationError
,因为没有缩进它的内容
接下来,在
accept\u connection
函数中,您使用的threading
错误
thread.Threading
不存在;您可能是指Threading.thread
args
必须是值的序列(元组、列表等)。您可能希望(连接)
是一个值的元组,但事实并非如此;元组由逗号定义,而不是括号,您所拥有的只是值连接
,周围有多余的括号。您想要(连接,)
这里
另外,在线程对象上调用run
只会在当前线程中运行线程的代码。您要调用,它将启动一个新线程并在该线程上调用run
方法
同时,你从来没有在任何地方调用过这个函数,所以它当然不能做任何事情。想想你想在哪里调用它。在创建侦听器套接字之后,你想在
accept
中循环,为每个接受的连接启动一个新的客户端线程,对吗?所以,你想在co内循环调用它连接
,或在顶层(在这种情况下,连接
必须返回s
)
最后,您的
accept\u connection
函数无法从其他函数访问局部变量;如果您希望它使用名为s
的套接字,则必须将其作为参数传递
因此:
作为旁注,请小心使用
sock.recv(1024)
,并假设您将获得另一方使用send(msg)发送的整个消息
。您可能会得到它,或者您可能会得到一半的消息,或者整个消息加上客户端稍后发送的另一条消息的一半。套接字只是字节流,就像文件一样,而不是单独的消息流;您需要某种协议来分离消息
最简单的协议是在自己的线路上发送每条消息和
对于f:
中的行,就像对真实文件一样。当然,如果您的邮件可以有换行符,这是不起作用的,但是您可以,例如,在一侧反斜杠转义,在另一侧取消转义。您的基本设计很接近,但是您遇到了很多小问题,很难继续前进
首先,函数名中有一个空格,这是不允许的。还有一个IndentationError
,因为没有缩进它的内容
接下来,在
accept\u connection
函数中,您使用的threading
错误
thread.Threading
不存在;您可能是指Threading.thread
args
必须是值的序列(元组、列表等)。您可能希望(连接)
是一个值的元组,但事实并非如此;元组由逗号定义,而不是括号,您所拥有的只是值连接
,周围有多余的括号。您想要(连接,)
这里
另外,在线程对象上调用run
只会在当前线程中运行线程的代码。您要调用,它将启动一个新线程并在该线程上调用run
方法
同时,你从来没有在任何地方调用过这个函数,所以它当然不能做任何事情。想想你想在哪里调用它。在创建侦听器套接字之后,你想在
accept
中循环,为每个接受的连接启动一个新的客户端线程,对吗?所以,你想在co内循环调用它连接
,或在顶层(在这种情况下,连接
必须返回s
)
最后,您的
accept\u connection
函数无法从其他函数访问局部变量;如果您希望它使用名为s
的套接字,则必须将其作为参数传递
因此:
作为旁注,请小心使用
sock.recv(1024)
,并假设您将获得另一方使用send(msg)发送的整个消息
。您可能会得到它,或者您可能会得到一半的消息,或者整个消息加上客户端稍后发送的另一条消息的一半。套接字只是字节流,就像文件一样,而不是单独的消息流;您需要某种协议来分离消息
最简单的协议是在自己的线路上发送每条消息和
对于f:
中的行,就像对真实文件一样。当然,如果您的邮件可以有换行符,这是不起作用的,但是您可以,例如,在一侧反斜杠转义,在另一侧取消转义。您的基本设计很接近,但是您遇到了很多小问题,很难继续前进
首先,函数名中有一个空格,这还不是全部