Я пытаюсь создать многопоточный udp-сервер с python.Thread UDP Socket
Вот что я делаю:
#!/usr/bin/python
# -*- coding:Utf-8 -*-
import sys
import socket
from thread import start_new_thread
class Broker():
def __init__(self, ip, port):
self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.ip = ip
self.port = port
self.s.bind((ip, port))
self.listclients = []
def listenMod(b):
dic = {}
msg, ip = b.s.recvfrom(1024)
dic[msg] = ip
b.listclients.append(dic)
print msg, " is connected."
def broker(arg):
try:
b = Broker(arg[2], int(arg[3]))
start_new_thread(listenMod, (b,))
except Exception, e:
print e
sys.exit(-1)
def client(arg):
try:
pass
except:
pass
def usage():
print "usage ./udps.py <-b|-c> <args>"
print "-b\tserver mode\n\t<args>: host port"
sys.exit()
def main():
i = 1
if len(sys.argv) > 1:
while i < len(sys.argv):
if sys.argv[1] == "-b":
broker(sys.argv)
elif sys.argv[1] == "-c":
pass
else:
usage()
else:
usage()
if __name__ == '__main__':
main()
всегда печатает «[Errno 48] Адрес уже используется»
Я использую это, потому что я хотел бы быть в состоянии сделать, чтобы некоторые особые вещи с моими клиентами, но также и возможность подключения новых клиентов одновременно.
Вы называете 'broker()' несколько раз? Вы не можете привязать сокет к одному порту несколько раз ... Возможно, вы покажете еще один код, связанный с использованием 'broker()'. – tamasgal
нет, я этого не делаю. На самом деле это работает, если я не использую: start_new_thread (listenMod, (б)) но просто: listenMod (б) – ZeenaZeek
Какая строка кода потерпит неудачу? Можете ли вы предоставить полную рабочую примерную программу? –