class mydo(threading.Thread):
def __init__(self, id, count):
super(mydo, self).__init__()
self.count = count
self.id = id
def run(self):
while self.count > 0:
self.count -= 1
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
request = json.dumps({"Request": ["setMessage", "Hello Shuai!!"]})
sock.sendto(request, ('127.0.0.1', 8080))
tmp = sock.recvfrom(1024)
print(self.count, tmp)
sock.close()
numOfThreads = 1
threads = []
count = 500
for i in range(numOfThreads):
t = mydo(i, count)
threads.append(t)
for t in threads:
t.start()
for t in threads:
t.join()
也就是当count变为0的时候才输出结果,然后服务器也只收到一个请求
在Python中,可以使用socket
库的server
类来创建一个UDP服务器,然后创建一个Client
线程来与服务器进行通信。然而,由于UDP是无连接的,所以一个Client
线程只能"发送-接收"一次。
以下是一个简单的例子:
```python import socket
class ClientThread(threading.Thread): def init(self, client_socket, callback): threading.Thread.init(self) self.client_socket = client_socket self.callback = callback
def run(self):
try:
while True:
data = self.client_socket.recv(1024)
if not data:
break
self.callback(data)
except socket.timeout:
pass
if name == 'main': client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client_socket.bind(('localhost', 12345)) client_socket.listen(1)
callback = lambda data: print(data)
client_thread = ClientThread(client_socket, callback)
client_thread.start()
```
在这个例子中,ClientThread
线程会不断地从服务器接收数据,直到接收到数据结束为止。如果服务器在接收数据时出现连接超时,那么ClientThread
线程就会等待一段时间,然后重新尝试连接。