博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 网络编程
阅读量:4342 次
发布时间:2019-06-07

本文共 2279 字,大约阅读时间需要 7 分钟。

python网络编程常用模块及固定写法

socket模块

基于TCP的C/S架构

通信循环与连接循环

# 服务端import socketserver = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 设置端口可重用server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)# 设置阻塞 s.setblocking(1)server.bind(('127.0.0.1',8080))server.listen(5)while True : # 循环连接客户端    conn, client_addr = server.accept()    print(client_addr)    while True:        try:            from_client_data = conn.recv(1024)            print(from_client_data.decode('utf-8'))            conn.send(from_client_data + b'SB')        except ConnectionResetError:  # 客户端异常关闭            break        except ConnectionAbortedError:# 客户端主动断开连接            break    conn.close()# server.close()
# 客户端import socketclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client.connect(('127.0.0.1', 8080))  # 与服务端建立连接while True:    client_data = input('>>>')    if client_data == 'quit':        break    client.send(client_data.encode('utf-8'))    from_server_data = client.recv(1024)    print(from_server_data.decode('utf-8'))client.close()

recv工作方式

Receive up to buffersize bytes from the socket.

(最大从套接字接收缓冲区中接收缓冲区大小的字节串.)
For the optional flags argument, see the Unix manual.(可选参数的设置参口Unix手册.)
When no data is available, block untilat least one byte is available or until the remote end is closed.
(当缓冲没有数据是,该方法阻塞,直到缓冲区中出现至少一个数据或者远程端的连接正常关闭.)
When the remote end is closed and all data is read, return the empty string.
(当远程端正常关闭,且缓冲区中数据被取完时,该函数返回空值.)

远程控制

socketserver模块

并发服务器固定写法

import socketserver  # 引入模块class MyServer(socketserver.BaseRequestHandler):    # 类名随便定义,但是必须继承socketserver.BaseRequestHandler此类    def handle(self):  # 写一个handle方法,固定名字        while True:            # self.request 相当于conn管道            from_client_data = self.request.recv(1024).decode('utf-8')            print(from_client_data)            to_client_data = input('服务端回信息:').strip()            self.request.send(to_client_data.encode('utf-8'))if __name__ == '__main__':    ip_port = ('127.0.0.1', 8080)    socketserver.TCPServer.allow_reuse_address = True  # 允许端口重用    server = socketserver.ThreadingTCPServer(ip_port, MyServer)    # 对 socketserver.ThreadingTCPServer 类实例化对象,将ip地址,端口号以及自己定义的类名传入,并返回一个对象    server.serve_forever()  # 对象执行serve_forever方法,开启服务端

转载于:https://www.cnblogs.com/yxwxy/p/10420549.html

你可能感兴趣的文章
taotao用户登录(及登录成功后的回调url处理)
查看>>
Linux命令及获取帮助
查看>>
CSS样式margin:0 auto不居中
查看>>
POJ:3258-River Hopscotch
查看>>
ls 命令
查看>>
python比较数组
查看>>
反转单向链表
查看>>
取余运算
查看>>
新手小白Linux(Centos6.5)部署java web项目(mysql5.7安装及相关操作)
查看>>
java学习之Runtime
查看>>
RPC 简单小试
查看>>
行内元素 块状元素 内联块状元素
查看>>
idea clion编译器
查看>>
java mysql与.net MSSQL性能测试
查看>>
Homework3_3015218130_许鹏程
查看>>
ruby实现生产者和消费者
查看>>
node.js 之 http 架设
查看>>
MongoDB 备份与还原
查看>>
Oracle启动与关闭数据库实例
查看>>
Spring day01
查看>>