一个基于python的单线程的echo服务器

这是一个最简单的单线程echo服务器。

它的缺点就是会阻塞,服务器先启动之后,如果一个客户端和服务器链接了之后,其他的客户端就不能和服务器建立连接了。被阻塞。

运行效果如图:
首先启动服务器和一个client

《一个基于python的单线程的echo服务器》 image.png

《一个基于python的单线程的echo服务器》 image.png

但是,如果这个时候,在启动一个client,那他就会被阻塞。

《一个基于python的单线程的echo服务器》 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()

相关文章
一个基于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

    原文作者:zhaozhengcoder
    原文地址: https://www.jianshu.com/p/8f1941c4a549
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞