网络的概念:主机 端口 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消息
参数:接受消息的大小
返回值:
d