@Georgy123

Почему этот код не работает, и его нельзя убить с помощью ctrl+z?

Взял из одного туториала данный код,попробовал запустить, но оно все благополучно не работает.
import socket, time

host = socket.gethostbyname(socket.gethostname())# получает имя машины, на которой запущен питон и конвертирует в строку IpV4
port = 9873

clients = []

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#создание самого сокета 
s.bind((host,port))#привязывает сокет к данному адресу

quit = False
print("[ Server Started ]")

while not quit:
	try:
		data, addr = s.recvfrom(1024)#получает инфу с сокета; возвращает список из инфы в 1024 байт и адреса 

		if addr not in clients:
			clients.append(addr)

		itsatime = time.strftime("%Y-%m-%d-%H.%M.%S", time.localtime())

		print("["+addr[0]+"]=["+str(addr[1])+"]=["+itsatime+"]/",end="")
		print(data.decode("utf-8"))

		for client in clients:
			if addr != client:
				s.sendto(data,client)#отправка сообщения
	except:	
		print("\n[ Server Stopped ]")
		quit = True
		
s.close()

то был сервер, а это клиент
import socket, threading, time



shutdown = False
join = False

def receving (name, sock):
	while not shutdown:
		try:
			while True:
				data, addr = sock.recvfrom(1024)
				print(data.decode("utf-8"))



				time.sleep(0.2)
		except:
			pass
host = socket.gethostbyname(socket.gethostname())
port = 0

server = ("192.168.0.101",9873)

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind((host,port))
s.setblocking(0)

alias = input("Name: ")

rT = threading.Thread(target = receving, args = ("RecvThread",s))
rT.start()

while shutdown == False:
	if join == False:
		s.sendto(("["+alias + "] => join chat ").encode("utf-8"),server)
		join = True
	else:
		try:
			message = input()

			if message != "":
				s.sendto(("["+alias + "] :: "+message).encode("utf-8"),server)
			
			time.sleep(0.2)
		except:
			s.sendto(("["+alias + "] <= left chat ").encode("utf-8"),server)
			shutdown = True

rT.join()
s.close()

Когда запускаю клиент этого чата и ввожу имя ,он крашится и выдает "OSError: [WinError 10051] Сделана попытка выполнить операцию на сокете при отключенной сети". Как это можно вылечить?
  • Вопрос задан
  • 566 просмотров
Решения вопроса 1
@Zanak
у вас косяк в коде сервера вы listen и accept потеряли.
Попробуйте почитать вот это.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ZClick Москва
от 50 000 до 200 000 руб.
Protoplan Краснодар
от 80 000 до 150 000 руб.
19 июл. 2019, в 21:28
990 руб./за проект
19 июл. 2019, в 21:02
2000 руб./за проект