美文网首页
day33-基于UDP的套接字通信

day33-基于UDP的套接字通信

作者: 天行_b6d0 | 来源:发表于2020-08-24 14:39 被阅读0次

一、基于udp协议的套接字通信

TCP VS UDP协议
1、可靠性
tcp协议是可靠协议:
对方必须回复一个ack确认信息,才会将自己这端的数据从内存中删除

udp协议不可靠:
发送一条消息就会立即删除,不管对方是否接收到

2、有无链接
tcp有链接,udp无链接

3、传输数据的效率
udp更高

4、粘包问题
udp协议称之为数据报协议,每次发送都是一个完整的数据报,一个发送唯一对应一个接收
所以udp协议没有粘包问题


udp服务端

from socket import *
import time

server = socket(AF_INET, SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))

while True:
    data, client_addr = server.recvfrom(1024)
    time.sleep(10)
    server.sendto(data.upper(), client_addr)  # 这里默认是将接收的数据大写返回,也可以在定义返回信息

udp客户端

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.decode('utf-8'))

二、TCP基于socketserver模块实现并发

服务端

import socketserver


class MyRequestHandler(socketserver.BaseRequestHandler):
    def handle(self):  # 处理通信
        print(self.client_address)
        while True:
            try:
                data = self.request.recv(1024)  # self.request=>conn
                if len(data) == 0: break
                self.request.send(data.upper())  # 这里默认是将接收的数据大写返回,也可以在定义返回信息

            except Exception:
                break
        self.request.close()


if __name__ == '__main__':
    s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyRequestHandler, bind_and_activate=True)
    s.serve_forever()

客户端

from socket import *

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

while True:
    msg=input(">>: ").strip()
    if len(msg) == 0:
        continue

    client.send(msg.encode('utf-8'))
    data=client.recv(1024)
    print(data.decode('utf-8'))

三、UDP基于socketserver模块实现并发

服务端

import socketserver


class MyRequestHandler(socketserver.BaseRequestHandler):
    def handle(self):  # 处理通信
        data,server=self.request
        server.sendto(data.upper(),self.client_address)  # 这里默认是将接收的数据大写返回,也可以在定义返回信息


if __name__ == '__main__':
    s = socketserver.ThreadingUDPServer(('127.0.0.1', 8080), MyRequestHandler, bind_and_activate=True)
    s.serve_forever()

客户端

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.decode('utf-8'))

相关文章

  • day33-基于UDP的套接字通信

    一、基于udp协议的套接字通信 TCP VS UDP协议1、可靠性tcp协议是可靠协议:对方必须回复一个ack...

  • TCP/UDP套接字通信

    一,基于TCP套接字通信 服务端 客户端 二,基于UDP套接字通信 服务端 客户端 - 执行如下(服务端无返回信息...

  • iOS中的socket通信

    socket 套接字, 是基于TCP UDP 协议的 一种通信机制, 它本身就是对TCP 和UDp 协议应用的一...

  • Socket、TCP和UDP

    Socket介绍 socket 套接字, 是基于TCP UDP 协议的 一种通信机制, 它本身就是对TCP ...

  • Socket 通信之 TCP 通信

    上篇文章主要总结了 UDP 套接字的通信方式,这篇文章主要讲解 TCP 套接字的通信方式。 TCP 通信流程 一台...

  • MFC网口编程

    Socket套接字通信 TCP UDP详解(网络通信)[https://blog.csdn.net/qq_4179...

  • udp网络程序发送、接收数据

    基于udp的网络程序流程 步骤: 创建客户端套接字 发送/接收数据 关闭套接字udp.jpg 实现代码1--发送数...

  • python3网络编程:socket的简单使用

    01.套接字 套接字用于应用程序间的通信,任何程序间的通信开始之前都要创建套接字有两种类型的套接字:基于文件的和面...

  • 网络编程之套接字

    套接字 套接字编程 根据socket模块提供的接口函数,进行组合使 用完成基于tcp或者udp的网路...

  • 网络编程之UDP套接字编程

    UDP套接字服务端 创建UDP数据报套接字 绑定服务端地址(本机的IP和端口号) 消息的收发 关闭套接字 UDP套...

网友评论

      本文标题:day33-基于UDP的套接字通信

      本文链接:https://www.haomeiwen.com/subject/clhcjktx.html