#!/bin/env python # -*- coding: utf-8 -*- HOST = '' PORT = 20123 from socket import socket from time import strftime server = socket() server.bind((HOST, PORT)) try: while 1: server.listen(1) sock, address = server.accept() data = sock.recv(1024) if data=='gettime': print 'sending time' sock.send(strftime('%k:%M:%S')) sock.close() except: server.close()
#!/bin/env python # -*- coding: utf-8 -*- HOST = '' PORT = 20123 from socket import socket client = socket() client.connect((HOST, PORT)) client.send('gettime') data = client.recv(1024) client.close() if data: print data
останавливаю сервер. запускаю сервер и получаю такое
Traceback (most
recent call last):
File "./server.py", line 11, in ?
server.bind((HOST, PORT))
File "<string>", line 1, in bind
socket.error: (98, 'Address already in use')
tcp 0 0 desktop.localdoma:20123 desktop.localdomai:4543 TIME_WAIT
через какое-то время “netstat | grep 20123” ничего не говорит сервер снова можно запускать.
пробовал еще sock.close() в ветви except дописывать, но помоему это только лишнее
слышал что нужно использовать SO_REUSEADDR но я не понимаю как. вот такой код
server = socket.socket(socket.AF_INET, socket.SO_REUSEADDR)
2. как создать и работать с unix-сокетами (сокеты-файлы)? на сколько я понял нужно ковырять в сторону AF_UNIX, но как им пользоваться я так и не понял, или ищу я плохо.
ОС - Linux, если что.