tcp服务端和客服端

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客户端

  1. 创建客户端套接字要和访问的服务器的套接字类型相同
connect(address) #向服务器发起连接请求,address是一个元组,即为要连接的服务器的地址。
  1. 连接服务器
connfd.connect(ADDR)
  1. 和服务器进行通信
connfd.send(b'内容')
data=connfd.recv(1024)
  1. 关闭套接字
 `这里写代码片`

客户端与服务端的套接字类型需要相同
客户端就是用创建的套接字和服务器交互
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() 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值