Клиент-серверная программа, назначающая разные порты используя python - PullRequest
0 голосов
/ 08 июня 2019

Я написал клиентскую программу, в которой я пытаюсь привязаться к хост-машине и порту и пытаюсь запустить одну и ту же программу на другой машине, чтобы проверить, может ли сервер обрабатывать несколько клиентов, но я получаю ошибку.

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 голосов
/ 09 июня 2019

Непонятно, почему вы привязываете клиента к определенному адресу, но это, вероятно, не то, что вы хотите. Вот пример с несколькими потоками, показывающий, как первый вызов 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...