网络编程之基于udp协议套接字(代码片段)

dominic-ji dominic-ji     2022-11-05     399

关键词:

1.UDP协议介绍(数据报协议)

  UDP协议不同于TCP,通信时,它不需要事先建立双向链接,并且不区分客户端先启动还是服务端前起,工作原理:基于udp协议传输的信息,协议会将数据自动加上自定义的报头,这样每一个数据都是一个数据报,而流失协议由于自身优化算法,产生粘包现象,udp不会产生粘包现象,并且发出的消息可以为空,因为就算你发的是空消息,协议也会给你的空消息加上一段自定义报头,所以它还是一个数据报,而tcp协议在这里则不能发空消息,一旦发空消息,接收方会一直处于收的状态,发送方发完空后会一直处于收的状态,所以对于tcp协议需要加上一些异常处理代码,防止异常的发生,

  为什么说udp协议是不可靠而tcp是可靠的呢?这里面试可能会被问到,答案没你想得那么简单(因为tcp是基于双向链接而udp没有基于链接,数据发出去就行了~~~这么回答估计你这次面试也就GG了,背后的真正的原理:):首先必须搞清楚一个大的原理,应用程序收发消息都是跟谁打交道的???——没错是应用程序自身所在的操作系统,知道这一点之后,再来说,为什么tcp协议可靠,原因在于服务端向客户端发出数据(这里的数据也是先流到服务端的操作系统内存由服务端操作系统向客户端发)后,客户端必须向服务端发出确认消息,而服务端发出的数据,操作系统不会立即将内存中的数据立马清除,而是会等到确认消息后,才会清理数据内存,这个时候的数据才是无用的,如果没有收到确认信息,服务端隔断时间会再向客户端发送内存里存好的数据,这才是tcp协议通信的可靠的本质,

  反观udp则比较随性了,发送端将数据写好点击发送后,数据会被加上自定义报头然后由操作系统发出,发出后立马清除数据内存,要想用udp有效的传输数据,最大数据传输范围应该控制在512bytes,数据量超过这个限制,就无法再保证数据传输的稳定性了。

2.tcp协议完整代码逻辑

技术分享图片
import socket

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((127.0.0.1,8080))

while True:
    msg=input(>>>: ).strip()
    if not msg:continue
    client.send(msg.encode(utf-8))
    data=client.recv(1024)
    print(data.decode(utf-8))

client.close()
客户端
技术分享图片
import socket

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((127.0.0.1,8080))
server.listen(5)

while True:
    conn,client_addr=server.accept()
    print(client_addr)

    while True:
        try:
            data=conn.recv(1024)
            if not data:break # 针对linux系统
            conn.send(data.upper())
        except ConnectionResetError:
            break
    conn.close()

server.close()
服务端

3.udp协议代码

客户端:

import socket

client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议

while True:
    msg=input(>>>: ).strip()
    client.sendto(msg.encode(utf-8),(127.0.0.1,8080))
    res,server_addr=client.recvfrom(1024)
    print(res.decode(utf-8))

服务端:

import socket

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

while True:
    client_data,client_addr=server.recvfrom(1024)
    msg=input(回复%s:%s>>>: %(client_addr[0],client_addr[1]))
    server.sendto(msg.encode(utf-8),client_addr)

4.基于udp写实现网络沟通交流(建议版本qq)

import socket
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.bind((127.0.0.1,8808))

while True:
    data,client_addr=server.recvfrom(1024)
    print(get a message form %s:%s>>:%s%(client_addr[0],client_addr[1],data.decode(utf-8)))
    msg=input(please recall>>:).strip()
    server.sendto(msg.encode(utf-8),client_addr)
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while True:
    msg=input(what are you want to talk>>:).strip()
    if not msg:continue
    client.sendto(msg.encode(utf-8),(127.0.0.1,8808))
    msg,addr=client.recvfrom(1024)
    print(get a message from %s:%s>>:%s%(addr[0],addr[1],msg.decode(utf-8)))

技术分享图片

技术分享图片

5.基于udp协议编写时间服务器(访问就给你放回当前时间)

服务端

import socket,time
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.bind((127.0.0.1,8808))

while True:
    data,client_addr=server.recvfrom(1024)
    if not data:
        time_list=time.strftime(%Y-%m-%d %X)
    else:
        time_list=time.strftime(data.decode(utf-8))
    server.sendto(time_list.encode(utf-8),client_addr)

访问端

import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while True:
    msg=input(please input the format of time which are you want get>>:).strip()
    client.sendto(msg.encode(utf-8),(127.0.0.1,8808))
    data,addr=client.recvfrom(1024)
    print(time>>:%s%data.decode(utf-8))

 

82.基于tcp和udp协议的简单通信套接字编程(代码片段)

目录一、基于tcp协议的简单通信套接字编程二、加上通信循环三、加上链接循环一、基于tcp协议的简单通信套接字编程#客户端、importsocket#1、买手机phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#流式协议=》tcp协议#2、拨通服务端电... 查看详情

网络协议_udp详谈(代码片段)

...部5.UDP面向数据报6.UDP的缓冲区7.基于UDP的应用层协议8.UDP套接字编程1.UDP简介Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,UserDatagramProtocol)。UDP为应用程序提供了一种无需建立连接... 查看详情

java网络编程编程之tcp编程和udp编程(代码片段)

网络编程基础1.TCP编程1.1网络相关基础概念1.2TCP协议介绍1.3TCP编程案例2.UDP编程2.1UDP协议介绍2.2UDP编程案例1.TCP编程1.1网络相关基础概念我们在学习网络编程前先来复习一下IP地址端口号协议,套接字的相关概念。IP地址:用来... 查看详情

10.网络编程之socket(代码片段)

目录一、什么是socket?1.1套接字简介1.2套接字地址:主机-端口对二、面向连接的套接字和为无连接的套接字2.1面向连接的套接字2.2无连接的套接字三、python中socket3.1socket()模块函数3.2套接字对象(内置)方法3.3Socket中的一些参数四... 查看详情

udp网络编程(代码片段)

UDP网络通信类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序。UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。DatagramPacket对象封装了U... 查看详情

网络协议趣谈基于tcp和udp的套接字socket编程(代码片段)

在TCP和UDP协议中主要分客户端和服务端,在写程序的时候也同样这样分Socket这个名字很有意思,可以作插口或者插槽讲。虽然是软件程序,但可以想象为弄一根网线,一头插在客户端,一头插在服务端,然... 查看详情

基于udp协议的socket套接字编程

基于UDP协议的socket套接字编程一、UDP套接字简单示例1.1服务器importsocketserver=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#数据报协议-》UDPserver.bind(('127.0.0.1',8080))whileTrue:data,client_addr=server.recvfrom(1024 查看详情

java网络编程之udp和tcp套接字(代码片段)

文章目录一.网络编程概述二.UDP网络编程1.UDP套接字2.UDP客户端回显服务器程序2.1UDP回显服务器2.2UDP客户端2.3UDP实现查词典的服务器三.TCP网络编程1.TCP套接字2.TCP客户端回显服务器程序2.1TCP回显服务器2.2TCP客户端2.3解决服务器无法... 查看详情

网络编程(代码片段)

1一.楔子2二.软件开发的架构2.11.C/S架构2.22.B/S架构3三.网络基础3.1ip和端口3.2osi七层模型3.2.1引子3.2.2osi七层模型3.3socket概念3.3.1socket层3.3.2理解socket3.4套接字(socket)的发展史...3.4.1基于文件类型的套接字家族3.4.2基于网络类型的套... 查看详情

python中的端口协议之基于udp协议的通信传输(代码片段)

UDP协议:  1、python中基于udp协议的客户端与服务端通信简单过程实现  2、udp协议的一些特点(与tcp协议的比较)-------------------------------------------------------------------------------------------------------------------------------------一、 查看详情

网络通信与信息安全之深入解析tcp与udp传输协议(代码片段)

...文原义是“孔”或“插座”。在编程中,Socket被称做套接字,是网络通信中的一种约定。Socket编程的应用无处不在,我们平时用的QQ、微信、浏览器等程序,都与Socket编程有关。那么我们使用浏览器查资料,这... 查看详情

linux篇第十八篇——网络套接字编程(预备知识+udp套接字的编写)(代码片段)

⭐️本篇博客开始给大家介绍网络编程中的套接字编程——基于UDP协议的套接字和基于TCP的套接字,这篇博客主要介绍基于UDP协议套接字,下一篇介绍基于TCP协议的套接字。在介绍套接字编程之前,我会先给大家介绍... 查看详情

linux篇第十八篇——网络套接字编程(预备知识+udp套接字的编写)(代码片段)

⭐️本篇博客开始给大家介绍网络编程中的套接字编程——基于UDP协议的套接字和基于TCP的套接字,这篇博客主要介绍基于UDP协议套接字,下一篇介绍基于TCP协议的套接字。在介绍套接字编程之前,我会先给大家介绍... 查看详情

linux网络编程之套接字--udp(代码片段)

...2.1、socket常见API🍢2.2、structsockaddr结构体🍀3、UDP网络编程🍡3.1、API🍢3.2、简单的UDP网络程序🍧3.3、简单UDP多人聊天室服务器🌈前言这篇文章给大家带来套接字的学习!!!🌸1、背景知... 查看详情

网络编程之socket编程(代码片段)

套接字介绍socket介绍Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket... 查看详情

探索udp套接字编程

...好坏之分,只是二者的适用场景不同罢了。  典型的UDP套接字编程模型是客户端不予服务端建立连接,而只是调用sendto函数来向服务端发 查看详情

探索udp套接字编程

...好坏之分,只是二者的适用场景不同罢了。  典型的UDP套接字编程模型是客户端不予服务端建立连接,而只是调用sendto函数来向服务端发送数 查看详情

udp协议的套接字编程(代码片段)

服务端importsocketserver=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#数据报协议=》udp协议server.bind((‘127.0.0.1‘,8081))whileTrue:data,client_addr=server.recvfrom(1024)server.sendto(data.upper(),client_addr)server.close()客户端importsocketclient=socket.socket(socket.AF_INET,soc... 查看详情