网络编程---基于socket的UDP编程

Posted zhangjie19930507

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程---基于socket的UDP编程相关的知识,希望对你有一定的参考价值。

 

udp是无链接的,先启动哪一端都不会报错

udp不需要经过3次握手和4次挥手,不需要提前建立链接,直接发送数据即可

udp服务端

1 ss = socket()   #创建一个服务器的套接字
2 ss.bind()       #绑定服务器套接字
3 inf_loop:       #服务器无限循环
4     cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
5 ss.close()                         # 关闭服务器套接字

udp客户端

cs = socket()   # 创建客户套接字
comm_loop:      # 通讯循环
    cs.sendto()/cs.recvfrom()   # 对话(发送/接收)
cs.close()                      # 关闭客户套接字

 

服务端:

技术分享图片
# import socket
from socket import *   # 尽量少用这种导入方式,会将所有名字加入名称空间,容易导致重复
# server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   # 可以看到需要引用的socket的模块非常多。改用from socket import *导入
server = socket(AF_INET, SOCK_DGRAM)  # SOCK_STREAM指的流式协议,SOCK_DGRAM指得是数据报协议(但凡发数据,就已经是完整的数据报)
server.bind((127.0.0.1‘, 8080))

# server.listen(5)  # 挂起的链接数,TCP协议需要,UDP不需要

# while True:
#     conn, addr = server.accept()  # 用来建立链接,UDP不需要

while True:
    data, client_addr = server.recvfrom(1024)   # 收消息
    print(data)

    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, server_addr)

client.close()

 

 

 

 

 

以上是关于网络编程---基于socket的UDP编程的主要内容,如果未能解决你的问题,请参考以下文章

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

基于UDP协议之——socket编程

网络 基于UDP协议的socket编程

基于UDP的socket编程

基于UDP的socket编程

网络编程---基于socket的UDP编程