这是一个最简单的单线程echo服务器。
它的缺点就是会阻塞,服务器先启动之后,如果一个客户端和服务器链接了之后,其他的客户端就不能和服务器建立连接了。被阻塞。
运行效果如图:
首先启动服务器和一个client
但是,如果这个时候,在启动一个client,那他就会被阻塞。
这就是单线程服务器的局限性,所以解决方案是多线程,为每一个链接上来的客户机创建一个线程。
详细内容: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()
相关文章
一个基于python的单线程的echo服务器
http://www.jianshu.com/p/8f1941c4a549
基于python的一个多线程echo服务器
http://www.jianshu.com/p/2ffde49b55c3
一个基于select模型的echo服务器
http://www.jianshu.com/p/8a360a3f13aa
关于select,poll,epoll3个网络编程异步模型的区别
http://www.jianshu.com/p/3bf72e232fb8