网络的概念:主机 端口 IP 协议
服务器:
localhost/127.0.0.1
客户端:
只是在本机启动客户端,用127.0.0.1访问
服务器:
0.0.0.0
客户端:
可以在本机用127.0.0.1、192.168.0.1
服务器:
192.168.0.1
客户端:
局域网内用192.168.0.1
socket(创建套接字) --->bind(绑定地址) ---> listen(设置监听)---> accept(等待链接) ---> recv/send(收/发消息) ---> close ()
收发函数特性:
recv特征:
如果建立的另一端链接被断开, 则recv立即返回空字符串
recv是从接受缓冲区取出内容,当缓冲区为空则阻塞
recv如果一次接受不完缓冲区的内容,下次执行会自动接受
send特征:
如果发送的另一端不存在则会产生Pipe Broken异常
send是从发送缓冲区发送内容,当缓冲区为满则堵塞
网络的收发缓存区:
在内存中开辟区域,用于发送和接受的缓冲
作用:
协调数据的收发(接受和处理)速度
减少和磁盘的交互
sendall(date):
功能:tcp套接字发送消息
参数:同send
返回值:如果发送成功则返回None 否则返回异常
tcp粘包:
产生原因:
1.tcp传输以字节流的方式发送消息,消息之间没有边界
2.发送比接受的速度快
影响:
对每次发送的内容是一个独立的意识需要单独识别时 容易使用原文件被更改
如何处理:
1.每次发送后追加一个结尾标志,代表本次发送完毕
2.发送一个数据结构
3.每次发送有一个时间间隔
基于udp的服务端编程:
1.创建套接字:
sockfd = socket(AF_INET,SOCK_DGRAM)
2.绑定地址:
sockfd.bind()
3.消息收发
data, addr = sockfd.recvfrom(buffersize)
功能:接受udp消息
参数:接受消息的大小
返回值:
data接受到的内容
addr消息发送的地址<