tcp服务端
1. 创建一个tcp流式套接字
socket(family=AF_INET,type=SOCK_STREAM,proto=0)
#括号内的参数是默认值可省略不写
参数:family 协议族类型
type 套接字类型
proto=子协议选项 一般为0
返回值: 套接字对象
2. 绑定本机的IP和端口号
sockfd.bind(address)
参数:包含两个元素的元组,元组的第一个元素是本机名或者IP,第二个元素是使用的端口号。
比如:
('',8888) 或('localhost',8888)或('127.0.0.1',8888)
返回值:无
3. 将套接字转为监听套接字,并且设置一个连接等待队列
sockfd.listen(n) #n是一个正整数,它代表队列的长度。
4. 套接字等待客户端请求
conn,addr=sockfd.accept()#阻塞等待客户端的连接
参数:无
返回值:第一个返回值为和客户端交互的新的套接字,第二个返回值为连接进来的客户端的address
5. 消息的收发
recv(buffer) #收消息,buffer是一个正整数,表示一次从缓冲区中拿到的消息的字节数,
返回值:返回接收到的消息。
*当接收的网络缓冲中没有内容时会阻塞
send(data) #发消息,要发送的内容
返回值:实际发送的字节数
实例:
import socket #python 网络套接字模块
from socket import *
HOST='127.0.0.1'
PORT=8888
ADDR=(HOST,PORT)
BUFFERSIZE=1024
#1. 创建一个tcp流式套接字sockfd
sockfd=socket(AF_INET,SOCK_STREAM)
#2. 绑定本机的IP和端口号
sockfd.bind(ADDR)
#3. 将套接字转为监听套接字
sockfd.listen(5)
print("wait for connect......")
#4. 套接字等待客户端请求
conn,addr=sockfd.accept()
print("connect from ",addr)
#5. 消息的收发
data=conn.recv=(BUFFERSIZE) #接收消息,接到的消息是从缓冲区拿到的字节数
print("recvie",data.decode())
n=conn.send(b"Recv your message")#发送消息,data是发送的字节数
print("send%d"%n)
#6. 关闭套接字
conn.close() #表示和客户端断开连接
sockfd.close()#不能再使用sockfd了。
6. 关闭套接字
close() #关闭一个套接字
tcp客户端
- 创建客户端套接字要和访问的服务器的套接字类型相同。
connect(address) #向服务器发起连接请求,address是一个元组,即为要连接的服务器的地址。
- 连接服务器
connfd.connect(ADDR)
- 和服务器进行通信
connfd.send(b'内容')
data=connfd.recv(1024)
- 关闭套接字
`这里写代码片`
客户端与服务端的套接字类型需要相同
客户端就是用创建的套接字和服务器交互
recv和send要与服务器配合,避免recv死阻塞
实例:
from socket import *
HOST='127.0.0.1'# 要链接的服务器的地址信息
PORT=8888
ADDR=(HOST,PORT)
#1. 创建客户端套接字,要与访问的服务器的套接字类型相同
connfd=socket(AF_INET,SOCK_STREAM)
#2. 链接服务器
connfd.connect(ADDR)
#3. 和服务器进行通信
connfd.send(b"hello server")
data=connfd.recv(1024)
print("客户端收到信息",data)
#4. 关闭套接字,与服务器断开连接.
connfd.close()