我写了一个客户端程序,试图绑定到主机和端口,并尝试在不同的计算机上运行相同的程序,以检查服务器是否可以处理多个客户端,但是我遇到了错误。
OSError: [Errno 98] Address already in use
目标是使用同一台计算机,但具有更多端口来模拟超过10到1000的客户端。但是最初,我未能在同一台计算机上同时运行所有两个并行客户端程序。
我试图更改端口并绑定到它并在其他终端上运行它,但这不起作用。
有人可以给我一个代码示例吗?
import threading
from threading import Thread
import socket
from socket import *
import time
from time import ctime
def con_server(Host,port):
sock = socket(AF_INET, SOCK_DGRAM)
host='192.168.1.xx'
por=5060
ad=(host,por)
sock.bind(ad)
address=(Host,port)
sock.sendto("connection".encode(),address)
data,server=sock.recvfrom(4096)
data=data.decode()
print('Client:' +data)
if __name__=="__main__":
t2=threading.Thread(target=con_server,name='con_servr',args=("192.168.1.cc,4242))
t2.start()
t2.join()
已编辑的客户端:
import socket
def create_sock():
for port in range(6000,7000):
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(("localhost", port))
host = "localhost"
port = 4242
address = (host, port)
import time
print("sendtime",time.clock())
sock.sendto("connection".encode(), address)
data, server = sock.recvfrom(4096)
print("receivetime",time.clock())
data = data.decode()
print('Client:' + data)
if __name__=="__main__":
create_sock()
我编写了此客户端程序,以针对不同的端口生成多个客户端。您认为这是正确的做法吗?
答案 0 :(得分:0)
目前尚不清楚为什么将客户端绑定到特定地址,但这可能不是您想要的。这是一个具有多个线程的示例,该示例显示了对sendto
的第一次调用如何使套接字绑定到可用的本地端口。
import socket
import threading
def con_server(server_host, server_port, thread_num):
server_address = (server_host, server_port)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print(sock.getsockname())
sock.sendto(f"connection{thread_num}".encode("utf-8"), server_address)
print(sock.getsockname())
data = sock.recv(4096)
data = data.decode()
print('Client:' + data)
if __name__ == "__main__":
# SERVER_ADDR = ("192.168.1.cc", 4242)
SERVER_ADDR = ("localhost", 4242)
threads = []
for thread_num in range(30):
thread_args = (SERVER_ADDR[0], SERVER_ADDR[1], thread_num)
t = threading.Thread(target=con_server, name='con_servr', args=thread_args)
t.start()
threads.append(t)
for t in threads:
t.join()