Python-网络编程(一)
基于Python语言的网络编程,主要是socket网络通信
socket网络通信
概念
1 | 用于网络计算机通信的一种接口 |
处理流程
服务器
1
2
3
4
5
6
7创建(socket)
绑定地址(bind)
监听(listen)
接受(accept)
接收数据(recv)
发送数据(send)
关闭连接(close)客户端
1
2
3
4
5创建(socket)
连接服务器(connect)
发送数据(send)
接收数据(recv)
关闭连接(close)
套接字类型
流式套接字(SOCK_STREAM):
1
2
3面向连接、可靠传输、数据无差错的收发序列
提供流量控制功能
数据被看做字节流,长度无限制,多个数据包的数据持续流入数据报套接字(SOCK_DGRAM)
1
2面向无连接、不可靠传输,数据可能丢失、错误、重发
数据构成一个一个独立的数据报,每次一次发送就是一个数据报
Socket方法
创建
1
2
3
4
5
6socket.socket(socket_family = AF_INET, socket_type = SOCK_STREAM, proto = 0)
参数:socket_family 地址族类型, 默认填写AF_INET
socket_type 套接字类型
SOCK_STREAM 流式套接字
SOCK_DGRAM 数据报套接字
proto 子协议类型,默认填写0绑定:绑定IP地址和端口
1
2socket.bind(address)
参数:address 地址,元组类型; 第一个值为IP,第二个值为端口监听:使服务器可以接收连接请求
1
2socket.listen(backlog)
参数: backlog 未接收连接请求个数; 超过该值,则会拒绝后面的请求接受连接:
1
2
3
4connfd,addr = sockfd.accept()
功能:阻塞,等待客户端连接请求;
如果有新的连接,则返回;
返回值为一个新的socket(用于数据通信)和客户端地址接收数据:
1
2
3
4
5data = connfd.recv(buffersize)
功能 : 流式套接字接收消息
参数 : 一次最多接收多大的消息 字节
返回值 : 返回接收到的内容
如果对方关闭或发送完成,则返回空串发送数据:
1
2
3
4n = connfd.send(data)
功能 : 流式套接字发送消息
参数 : 要发送的内容 要求bytes格式
返回值 : 返回实际发送的字节数关闭套接字:
1
2sockfd.close()
功能:关闭套接字 tcp套接字连接断开请求连接(只能在客户端调用)
1
2
3sockfd.connect(addr)
功能: 连接服务端套接字
参数: addr 服务端地址
示例程序
简单交互
服务器
1 | import socket |
客户端
1 | import socket |
循环接收
服务器
1 | import socket |
循环客户端
1 | import socket |