这是一个最简单的单线程echo服务器。
它的缺点就是会阻塞,服务器先启动之后,如果一个客户端和服务器链接了之后,其他的客户端就不能和服务器建立连接了。被阻塞。
运行效果如图:
首先启动服务器和一个client
image.png
image.png
但是,如果这个时候,在启动一个client,那他就会被阻塞。
image.png
这就是单线程服务器的局限性,所以解决方案是多线程,为每一个链接上来的客户机创建一个线程。
详细内容:http://www.jianshu.com/p/2ffde49b55c3
源码:
server.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
HOST='127.0.0.1'
PORT=9999
sockaddr=(HOST,PORT)
sk=socket.socket()
sk.bind(sockaddr)
sk.listen(5)
while True:
conn,address=sk.accept()
while True:
try:
ret_bytes=conn.recv(1024)
except Exception as ex:
print("已从",address,"断开")
break
else:
conn.sendall(ret_bytes+bytes(', 已收到!',encoding='utf-8'))
print(ret_bytes)
sk.close()
客户端
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
HOST='127.0.0.1'
PORT=9999
sockaddr=(HOST,PORT)
ct=socket.socket()
ct.connect(sockaddr)
while True:
inp=input("请输入要发送的内容: ")
ct.sendall(bytes(inp,encoding='utf-8'))
ret_bytes=ct.recv(1024)
print(str(ret_bytes,encoding='utf-8'))
ct.close()