TCP服务端
from socket import *
1.创建套接字
socket(socket_family=AF_INET,
socket_type=SOCK_STREAM,
proto=0)
功能:创建套接字
参数:socket_family: 选择地址簇种类 AF_INET
socket_type: 套接字类型SOCK_STREAM 流式套接字
SOCK_DGRAM 数据报套接字
proto: 子协议类型默认为0
返回值:返回创建的套接字
2.绑定IP和端口号
sockfd.bind()
功能: 绑定IP和端口
参数: 是一个元组,第一项是字符串形式的IP
第二项是端口号
(’192,168,1,1’,8888)
3.让套接字具有监听功能
sockfd.listen(n)
功能:使套接字变为监听套接字,同时创建监听队列
参数:n监听队列大小
4.等待客户端连接
sockfd.accept()
功能:阻塞等待客户端连接
返回值:第一个:返回一个新的套接字用来和客户端同信
第二个:返回连接的客户端的地址
5.消息的收发
recv(buffer)
功能:接受消息
参数:一次接受消息的大小 字节
返回值:返回接收到的内容
send(data)
功能:发送消息
参数:发送的内容(发送byte格式的字节)
返回值:发送了多少个字节
当没有接收端的时候send操作会导致 broken pipe
6.关闭套接字
close()
功能:关闭套接字
TCP客户端
1.创建流式套接字
2.发起连接请求
connect()
功能:发起连接
参数:一个元组 第一个元素: 服务器的IP
第二个元素: 服务器的port
3.收发消息
4.关闭套接字
tcp_client.py1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21from socket import *
#创建套接字
sockfd=socket(AF_INET,SOCK_STREAM)
#发起连接
sockfd.connect(('127.0.0.1',9999))
while True:
#发送消息
msg=input('input:')
sockfd.send(msg.encode())
if not msg:
break
#接受消息
data=sockfd.recv(1024)
print(data.decode())
#关闭连接
sockfd.close()
tcp_server.py1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26from socket import *
#创建流式套接字
sockfd=socket(AF_INET,SOCK_STREAM,0)
#绑定IP和端口
sockfd.bind(('127.0.0.1',8882))
#设置为监听套接字,创建监听队列
sockfd.listen(5)
while True:
#等待客户端连接
print('waiting for connect...')
input('hello')
connfd,addr=sockfd.accept()
print('connect from:',addr)
while True:
#收发消息
data=connfd.recv(10)
if not data:
break
print(data.decode())
connfd.send('receive your message'.encode())
#关闭套接字
connfd.close()
sockfd.close()