python

Python TCP

2019-06-11  本文已影响0人  iOSDevLog

利用 python 的 socket 模块可以实现基本的网络编程,并且只限于一对一的连接。当然,也可以在其基础上实现一个网络服务器,但由于太底层这种做法不被推荐。

其实如果要实现一个网络服务器很简单,调用 Python 的内置模块 socketserver 就够了。

server 类

socketserver模块下面有四种套接字 server 类:

前两种分别为使用 TCP 和 UDP 协议的 server 类,后两种用法和前面一样但只限于类 unix 系统。

它们的参数都一样,如下:

TCPServer(server_address, RequestHandlerClass, bind_and_activate=True)

前面的四种类都继承自一个 BaseServer 类,实现了基本方法和属性:

请求处理类

通常需要继承BaseRequestHandler,并重写hanle()方法。当一个网络请求被创建时,一个新的实例就会被创建。

class socketserver.BaseRequestHandler

方法如下:

Server 服务器代码如下:

import socketserver


class echorequestserver(socketserver.BaseRequestHandler):
    def handle(self):
        print('服务端启动...')
        conn = self.request
        print('获得连接:', self.client_address)
        while True:
            client_data = conn.recv(1024)
            if not client_data:
                print('断开连接')
                break
            print(client_data.decode('utf-8'))
            print('开始发送...')
            conn.sendall(client_data)


if __name__ == '__main__':
    server = socketserver.TCPServer(("127.0.0.1", 8000),
                                    echorequestserver)  # 使用处理单连接的TCPServer
    server.serve_forever()

Client 客户端代码如下:

import socket, time

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 8000))

while True:
    st = input("input command: ")
    if not st:
        break
    s.send(st.encode("utf-8"))

    echo_back = s.recv(1024)
    print(echo_back.decode("utf-8"))

s.close()

参考:利用python实现TCP和UDP服务器

上一篇 下一篇

猜你喜欢

热点阅读