@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] Сделана попытка выполнить операцию на сокете при отключенной сети". Как это можно вылечить?
  • Вопрос задан
  • 2270 просмотров
Решения вопроса 1
@Zanak
у вас косяк в коде сервера вы listen и accept потеряли.
Попробуйте почитать вот это.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы