Python 3 udp套接字

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达并不清楚。

虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议

基于UDP的套接字 udp是无链接的,先启动哪一端都不会报错

udp服务端

ss = socket()   #创建一个服务器的套接字

ss.bind()       #绑定服务器套接字

inf_loop:       #服务器无限循环

     cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)

ss.close()                          # 关闭服务器套接字

udp客户端

cs = socket()   # 创建客户套接字

comm_loop:      # 通讯循环

    cs.sendto()/cs.recvfrom()   # 对话(发送/接收)

cs.close()                      # 关闭客户套接字

udp套接字简单示例

from socket import *

udp_server=socket(AF_INET,SOCK_DGRAM)

udp_server.bind(('127.0.0.1',8080))

while True:

    data,client_addr=udp_server.recvfrom(1024)

    print(data,client_addr)

    udp_server.sendto(data.upper(),client_addr)

服务端

from socket import *

udp_client=socket(AF_INET,SOCK_DGRAM)

while True:

    msg=input('>>: ').strip()

    udp_client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))

    data,server_addr=udp_client.recvfrom(1024)

print(data.decode('utf-8'))

客户端

基于udp套接字不会粘包

from socket import *

udp_server=socket(AF_INET,SOCK_DGRAM)

udp_server.bind(('127.0.0.1',8080))

data1,client_addr=udp_server.recvfrom(1)  # windows 系统会报异常 linux 系统不会报异常

print('data1',data1)

data2,client_addr=udp_server.recvfrom(1024)

print('data2',data2)

服务端

from socket import *

udp_client=socket(AF_INET,SOCK_DGRAM)

udp_client.sendto('hello'.encode('utf-8'),('127.0.0.1',8080))

udp_client.sendto('world'.encode('utf-8'),('127.0.0.1',8080))

客户端

udp套接字的并发

import socketserver

class MyUDPhandler(socketserver.BaseRequestHandler):

    def handle(self):

        print(self.request)

        self.request[1].sendto(self.request[0].upper(),self.client_address)

if __name__ == '__main__':

    s=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyUDPhandler)

    s.serve_forever()

服务端

from socket import *

udp_client=socket(AF_INET,SOCK_DGRAM)

while True:

    msg=input('>>: ').strip()

    udp_client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))

    data,server_addr=udp_client.recvfrom(1024)

    print(data.decode('utf-8'))

客户端

最新文章

  1. setTimeout方法
  2. PHP笔记-PHP中Web Service.
  3. Java-马士兵设计模式学习笔记-桥接模式
  4. java 开发环境
  5. 动态添加组件(XML)
  6. ArcServer,ArcSDE,ArcIMS,ArcEngine
  7. 【转】C#读取文件时的共享方式
  8. java 对map排序
  9. Linq第三讲
  10. gradle windows 环境变量
  11. Spring-Security 自定义Filter完成验证码校验
  12. docker使用教程
  13. CodeForces 1143A The Doors
  14. Ubuntu ssh-keygen 生成公钥并添加到远程服务器上
  15. Linus 谈软件开发管理经验(转载)
  16. Spark入门(Python版)
  17. 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) 日常训练
  18. oracle审计AUD$过大导致的数据库登录异常
  19. Python获取位数
  20. 九款常用的JS代码高亮工具

热门文章

  1. ListView知识点汇总(9.2)
  2. python使用mysql数据库(虫师)
  3. httpd在嵌入式中应用
  4. nginx大量TIME_WAIT的解决办法 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  5. 【Mac + Python】苹果系统之安装Python3.6.x环境
  6. 动态创建Lambda表达式实现高级查询
  7. jqury 如何获取 kindeditor 中textarea 的值
  8. window下安装php7的memcache扩展
  9. Java是否存在内存泄露
  10. 【POJ-2524】Ubiquitous Religions(并查集)