客户端-服务器程序使用python

时间:2019-06-08 19:49:19

标签: python-3.x multithreading sockets

我写了一个客户端程序,试图绑定到主机和端口,并尝试在不同的计算机上运行相同的程序,以检查服务器是否可以处理多个客户端,但是我遇到了错误。

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()

我编写了此客户端程序,以针对不同的端口生成多个客户端。您认为这是正确的做法吗?

1 个答案:

答案 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()