udp协议没有粘包问题、基于socketserver实现并发的socket(基于tcp、udp协议)、基于udp协议的套接字、操作系统原理以及进程知识

本文探讨了UDP协议不会产生粘包问题的原因,并概述了计算机系统原理,特别是从第一代到第四代计算机的发展,强调了操作系统和批处理系统在解决资源利用率方面的演变,以及进程在操作系统中的核心地位。
摘要由CSDN通过智能技术生成
基于udp协议的套接字通信

服务端
from socket import *

server=socket(AF_INET,SOCK_DGRAM)    #数据报协议-》udp
server.bind(('127.0.0.1',8080))

data,client_addr=server.recvfrom(1)    #recvfrom(1)括号内的数字1表示:b'hello'==>b'h'
print('第一次:    ',client_addr,data)

data,client_addr=server.recvfrom(1024)    #recvfrom(1024)括号内的数字1024表示:b'world' =>b'world'
print('第二次:    ',client_addr,data)

data,client_addr=server.recvfrom(1024)
print('第三次:    ',client_addr,data)
server.close()


客户端
from socket import *

client=socket(AF_INET,SOCK_DGRAM)    #数据报协议-》udp
client.sendto('hello'.encode('utf-8'),('127.0.0.1',8080))
client.sendto('world'.encode('utf-8'),('127.0.0.1',8080))
client.sendto(''.encode('utf-8'),('127.0.0.1',8080))
client.close()

结果:
第一次: ('127.0.0.1', 54991) b'h'
第二次: ('127.0.0.1', 54991) b'world'
第三次: ('127.0.0.1', 54991) b''

udp并不会产生粘包问题,是由于UDP发送的时候,没有经过Negal算法优化,不会将多个小包合并一次发送出去。另外在UDP协议的接收端,采用了链式结构来记录每一个到达的UDP包,这样接收端应用程序一次recv只能从socket接收缓冲区中读出一个数据包。也就是说,发送端send了几次,接收端必须recv几次(无论recv时指定了多大的缓冲区)

基于tcp协议的套接字通信
服务端
from socket import *

server=socket(AF_INET,SOCK_DGRAM)    #数据报协议-》udp
server.bind(('127.0.0.1',8080))

while True:
    data,client_addr=server.recvfrom(1024)
    print('===>',data,client_addr)
    server.sendto(data.upper(),client_addr)
server.close()

客户端
from socket import *

client=socket(AF_INET,SOCK_DGRAM)

while True:
    msg=input('>>:    ').strip()
    client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
    data,server_addr=client.recvfrom(1024)
    print(data)
client.close()
基于socketserver实现并发的socket(基于tcp协
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值