一、UDP编程

1.客户端Client:发起访问的一方。

2.服务器端

3.server段编程

(1)建立socket,socket是负责具体通信的一个实例

(2)绑定,为创建的socket指派固定的端口和IP地址

(3)接受对方发送内容

(4)给对方发送反馈,此步骤为非必须步骤

4.Client端编程

(1)建立通信的socket

(2)发送内容到指定服务器

(3)接受服务器给定的反馈内容

5.模拟一下这个过程

(1)我们先建立一个服务器的函数

#服务器案例

import socket

​

#模拟服务器的函数

def serverFunc():

    #1.建立socket

    #socket.AF_INET:使用IPV4协议族

    #socket.SOCK_DGRAM:使用UDP通信

    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    #2.绑定ip和port

​

    #127.0.01:这个ip地址代表的是机器本身

    #7852:随机指定的端口号

    #地址是一个tuple类型,(ip.port)

    addr = ("127.0.0.1",7852)

    sock.bind(addr)

​

    #接受对方消息

    #等待方式为死等,没有其他可能性

    #recvfrom接受的返回值是一个元组,前一项表示数据,后一项表示地址

    #参数的含义是缓冲区大小

    #rst = sock.recvfrom(500)

    data,addr = sock.recvfrom(500)

​

    print(data)

    print(type(data))

​

    #发送过来的数据是bytes格式,必须通过解码才能得到str格式内容

    #decode默认参数是utf8

    text = data.decode()

    print(type(text))

    print(text)

​

    #给对方反馈的消息

    rsp = "I am very hungry now"

​

    #发送的数据需要编程成bytes格式

    #默认时utf8

    data = rsp.encode()

    sock.sendto(data,addr)

if __name__ == "__main__":

    print("Start Server")

    serverFunc()

print("End Server")

(2)然后创建一个客户端的函数


import socket

def clientFunc():

    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    text = "you are very cool"

​

    #发送的数据必须是bytes格式

    data = text.encode()

    #发送

    sock.sendto(data,("127.0.0.1",7852))

    data,addr =sock.recvfrom(200)

​

    data = data.decode()

    print(text)

​

if __name__ == "__main__":

    print("Start Client")

    clientFunc()

print("End Client")

(3)我们先启动服务器端函数

出现如下图像,它是创建了一个sock,然后自己绑定到127.0.0.1:7852,运行到sock.recvfrom(500)这里死等客户端发消息

(4)再启动客户端函数

出现如下发送编码后的​text内容到服务器(127.0.0.1:7852),服务器成功接收后返回you are cool这句话。

(5)我们再看服务器的函数那里

接受了bytes格式的字符串,并打印出来了,然后再解码打印出来,最后把you are cool返回​客户端。

(6)这里有个地方没有办法:因为我们在一台电脑上做的测试,所以相当于自言自语,​不如在两台电脑上进行试验。​

二、源码

D33_1_ServerProgramme.py

D33_2_ClientProgramme.py

https://github.com/ruigege66/Python_learning/blob/master/D33_1_ServerProgramme.py

https://github.com/ruigege66/Python_learning/blob/master/D33_2_ClientProgramme.py

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

最新文章

  1. 修改Tomcat响应请求时返回的Server内容
  2. 继续Django
  3. 关于UIView的autoresizingMask属性的研究【转】
  4. PDA手持终端在ERP系统仓库管理出入库盘点环节的应用
  5. IP一些基础知识
  6. [SSH服务]——SSH详解、常用的远程连接工具
  7. 转: android编译过程(流程图)
  8. JDK版本1.6和6.0到底指什么
  9. uva 725 Division(除法)暴力法!
  10. 无心插柳OR志在必得?阿里推“来往”的意图
  11. 【Tarjan,LCA】【3-21个人赛】【problemD】
  12. 史上最强php生成pdf文件,html转pdf文件方法
  13. DBUtils架构分析
  14. Springboot自定义过滤器Filter
  15. 2014-2015 ACM-ICPC, Asia Xian Regional Contest GThe Problem to Slow Down You
  16. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 3.安装配置OpenStack认证服务(keystone)
  17. redis quick start
  18. Caffe提取任意层特征并进行可视化
  19. [转载]编写高性能js
  20. DDL、DML和DCL的比较【引用学习】

热门文章

  1. 在linux环境下重启oracle数据库,解决密码过期的问题
  2. java类成员的默认可访问性是什么?你猜
  3. C++ --内存四区概述
  4. Linux tree
  5. python 基础学习笔记(7)--迭送器
  6. avd manger创建的虚拟机启动不起来,或者启动起来后黑屏
  7. [阅读笔记]EfficientDet
  8. error: [debug/qrc_resource.cpp] Error 1
  9. 13. Go 语言网络爬虫
  10. js 运算的内置函数