@shansung

Почему не закрывается сокет?

Не понимаю почему не закрывается сервер после завершения работы клиента
Клиент:
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
addres = ('localhost', 9091)
sock.connect(addres)

f1 = open('array.txt','rb')
arr = f1.read().decode('utf-8').split(' ')
f2 = open('array2.txt','rb')
arr2 = f2.read().decode('utf-8').split(' ')
f3 = open('database.txt','wb')
for i in range(0, 3):
	f = open('send.txt','wb')

	f.write(bytes(arr[i] + ' ', 'utf-8'))
	c = 0
	while(c < 1512 - len(arr[i]) - 1):
		f.write(bytes('0', 'utf-8'))
		c += 1
	f.close()
	f = open('send.txt', 'rb')

	print('Sending...')

	l = f.read(1512)
	while (l):
		sock.sendto(l,addres)
		l = f.read(1512)
	f.close()
	time.sleep(int(arr2[i]))
	f3.write(bytes(sock.recv(1024) + b' ') )
sock.close()

Сервер:
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('', 9091))
while True:
	
	data,addr = sock.recvfrom(1512)
	print (data)
	if not data:
		print ("Client has exited!")
		break
	else:
		data = data.decode("utf-8")
		data_arr = data.split(' ')
		counter = int(data_arr[0])
		
		res = 0
		while(counter):

			res += 100000
			counter -= 1
	sock.sendto(bytes(str(res), 'utf-8'), addr)
	
sock.close()
  • Вопрос задан
  • 465 просмотров
Пригласить эксперта
Ответы на вопрос 2
Olej
@Olej
инженер, программист, преподаватель
А не нужно один и тот же вопрос повторять по много раз!
Если кто-то вам высказал мнение, что ваш код - говённый, то это его мнение и имеет право быть (может оно так и есть?). Но это вовсе не повод дублировать и дублировать свой вопрос.

Кто вам сказал что он не закрывается?
Каким образом это вы определяете?
(показали бы хоть ход выполнения, с терминала ... print поставьте перед close ...)
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
if not data:
    print ("Client has exited!")
    break

Этот код никогда не выполнится, SOCK_DGRAM же и сокет блокирующий. recvfrom возвратится только если пришла новая датаграмма.
Ответ написан
Ваш ответ на вопрос

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

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