【发布时间】:2016-09-17 15:26:29
【问题描述】:
我正在尝试使用非阻塞套接字在 python 中实现一个非常基本的客户端服务器代码。我做了两个线程用于阅读和写作。
我的客户端代码如下。
import sys
import socket
from time import sleep
from _thread import *
import threading
global s
def writeThread():
while True:
data = str(input('Please input the data you want to send to client 2 ( to end connection type end ) : '))
data = bytes(data, 'utf8')
print('You are trying to send : ', data)
s.sendall(data)
def readThread():
while True:
try:
msg = s.recv(4096)
except socket.timeout as e:
sleep(1)
print('recv timed out, retry later')
continue
except socket.error as e:
# Something else happened, handle error, exit, etc.
print(e)
sys.exit(1)
else:
if len(msg) == 0:
print('orderly shutdown on server end')
sys.exit(0)
else:
# got a message do something :)
print('Message is : ', msg)
if __name__ == '__main__':
global s
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('',6188))
s.settimeout(2)
wThread = threading.Thread(None,writeThread)
rThread = threading.Thread(None,readThread)
wThread.start()
rThread.start()
s.close()
问题:
我知道这也可以通过 select 模块来实现,但我想知道如何做到这一点。
【问题讨论】:
-
如果您提供准确的错误输出会有所帮助。
-
connect调用成功了吗?
标签: sockets python-3.x server