网络编程 02

recv()特征
1. 如果连接端断开,recv会立即结束阻塞返回空字符串
2. 当接收缓冲区为空时会阻塞
3. 如果recv一次接受不完缓冲区内容,下次会继续接受    ,确保数据不丢失
send()特性
1.如果另一端不存在还试图使用send进行发送则会产生BrokenPipeError异常
2.当发送缓冲区满时会阻塞

网络收发缓冲区
*缓冲区的功能 : 协调读写速度,减少和磁盘交互
recv和send实际上是从缓冲区内获取内容,和向缓冲区发送内容
tcp粘包
产生原因:tcp传输采用字节流的方式,消息之间没有边界,如果发送和接受速度不匹配,会造成多次发送的内容被一次接受,形成意义上的误解即粘包
产生条件 : 当使用send快速的连续发送极有可能产生粘包。
影响: 如果每次发送的内容代表一个独立的意思,此时产生粘包需要处理。但是如果多次发送的内容本身就是一个连续的整体,此时就不需要处理。
如何处理 :
1. 每次发送后加一个结尾标志,接收端通过标志进行判断
2. 发送一个数据结构
3. 每次发送中间有一个短暂的延迟
基于udp的通信
服务端
1. 创建套接字 ---》 数据报套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
2. 绑定服务端地址
sockfd.bind()
3. 消息的收发
data,addr = recvfrom(buffersize)
功能 : 接受udp消息
参数 : 每次最多接收消息的大小
返回值 : data  接收到的消息
          addr  消息发送者的地址
sendto(data,addr)
功能: udp发送消息
参数: data要发送的消息   bytes
       addr 目标地址
返回值 : 发送的字节
4.关闭套接字
sockfd.close()
cookie
sys.argv
功能 : 获取来自命令行的参数,形成一个列表
* 以空格作为每一项分隔,如果一项中有空格则用引号表   示一个整体
* 命令行内容均作为字符串传入
udp客户端
1. 创建套接字
2. 消息收发
3. 关闭套接字
tcp流式套接字 和 udp数据报套接字 区别
1. 流式套接字采用字节流的方式传输数据,而数据报套    接字以数据报形式传输
2. tcp会产生粘包现象,udp消息是有边界的不会粘包
3. tcp传输是建立在连接的基础上,保证传输的可靠性    ,而udp一次接受一个数据报,不保证完整性
4. tcp需要依赖listen accept建立连接,udp不用
5. tcp 收发消息使用recv send udp用recvfrom sendto
补充:
sendall()
功能 : 同send() 作为tcp消息发送
参数 : 同send()
返回值 : 发送成功返回None ,发送失败返回异常
socket模块和套接字属性
(s表示一个套接字对象)
s.type  :  获取套接字类型
s.family : 获取地址族类型
s.fileno()
功能 : 获取套接字的文件描述符
文件描述符 :每一个IO操作系统都会为其分配一个不同 的正整数,该正整数即为此IO操作的文件描述符。
s.getsockname()
功能 : 获取套接字绑定地址
s.getpeername()
功能 : 获取连接套接字另一端的地址
s.setsockopt(level,optname,value)
功能:设置套接字选项  丰富修改原有套接字功能
参数: level : 获取选项的类型
       optname : 每个选项类型中的子选项
       value :  为选项设置值
      
s.getsockopt(level,optname)
功能 : 获取套接字选项的值

udp套接字应用之广播
一点发送多点接收
目标地址 : 广播地址,每个网段内最大的地址
172.60.50.255   ----》 <broadcast>
cookie
format()
功能:合成字符串

tcp应用之HTTP传输
http协议 ---》 超文本传输协议   应用层协议
用途 : 网页的获取,基于网站的数据传输
        基于http协议的数据传输
特点:
1. 应用层协议,传输层使用tcp传输
2. 简单灵活,和多种语言对接方便
3. 无状态协议,不记录用户的通信内容
4. 成熟稳定 http1.1
工作模式 :
* 使用http双方均遵循http协议规定发送接收消息体
* 请求方,根据协议组织请求内容发送给对方
* 服务方,收到内容按照协议解析
* 服务方,将回复内容按照协议组织发送给请求方
* 请求方,收到回复根据协议解析
http请求
http响应

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java网络编程是一种通过使用Java编程语言,在计算机网络上实现通信的技术。它涉及到协议、IP地址和端口号等三个重要要素。Java编写的应用程序可以在单个计算机上运行,也可以在网络的服务器端和客户端上分布运行。此外,Java还可以用于编写小型应用程序模块或applet,作为网页的一部分使用。applet可以嵌入网页中,并在浏览器中运行。在Java中,使用URI可以代表绝对的或相对的资源,而URL则包含了定位资源的信息,并且不能是相对的。Java提供了一系列的类和接口,例如InetAddress、Socket、ServerSocket、URL和URLConnection等,用于实现各种网络应用。通过使用这些类和接口,可以创建连接客户端和服务器之间的套接字,并实现面向连接的通信,保证数据的可靠传输。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java网络编程](https://blog.csdn.net/weixin_42784609/article/details/130388655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [超详细入门到精通自学视频课程(阶段01:JavaSE基础02 编程思维编程思维和编程能力、综合应用专题-04、案例...](https://download.csdn.net/download/weixin_54787054/88224199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [网络编程](https://blog.csdn.net/zhixingwu/article/details/103226003)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值