1. 创建socket

在 Python 中 使用socket 模块的函数 socket 就可以完成(大多数的编程语言的套路是相似的):

  1. import socket
  2. socket.socket(AddressFamily, Type)

说明:

函数 socket.socket 创建一个 socket,该函数带有两个参数:

  • Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET
  • Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)

创建一个udp socket(udp套接字):

  1. import socket
  2. # 创建udp socket
  3. udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  4. # ...
  5. # 使用套接字收/发数据
  6. # 关闭socket
  7. udp_socket.close()

说明:

  • 套接字使用流程 与 文件的使用流程很类似

    1. 创建套接字
    2. 使用套接字收/发数据
    3. 关闭套接字

2. udp网络程序-发送数据

创建一个基于udp的网络程序流程很简单,具体步骤如下:

  1. 创建客户端套接字
  2. 发送/接收数据
  3. 关闭套接字
  1. import socket
  2. def main():
  3. # 创建套接字
  4. udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  5. # 读取输入的数据
  6. send_data = input('请输入要发送的数据:')
  7. # 发送数据
  8. send_addr = ('192.168.92.190', 7878)
  9. udp_socket.sendto(send_data.encode('GBK'), send_addr)
  10. # 关闭
  11. udp_socket.close()
  12. if __name__ == '__main__':
  13. main()

在ubuntu的终端中执行:

在windows中运行“网络调试助手”:

3. udp网络程序-接收数据

  1. import socket
  2. def main():
  3. # 创建套接字
  4. udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  5. # 绑定一个本地信息
  6. localaddr = ("", 8080)
  7. udp_socket.bind(localaddr)
  8. # 接收数据
  9. recv_data = udp_socket.recvfrom(1024)
  10. # recv_data是一个元组(接收到的数据, (发送方的IP, port))
  11. recv_msg = recv_data[0] # 存储接收到的数据
  12. send_addr = recv_data[1] # 存储发送方的地址
  13. # 打印收到的消息
  14. # print(recv_data)
  15. print("%s:%s" % (str(send_addr), recv_msg.decode('GBK')))
  16. # 关闭
  17. udp_socket.close()
  18. if __name__ == '__main__':
  19. main()

在ubuntu的终端中执行:

在网咯助手中发送数据:

4. python3中的编码转换

  • 使用socket发送的是数据的二进制,需要将字符串转换成bytes
  1. str.encode()
  • 使用socket接收的是数据的二进制,需要将bytes转换成字符
  1. bytes.decode()

在ipython3中尝试:

  1. In [2]: text = "一串文本"
  2. In [3]: text
  3. Out[3]: '一串文本'
  4. In [5]: bytes_text = text.encode()
  5. In [6]: bytes_text
  6. Out[6]: b'\xe4\xb8\x80\xe4\xb8\xb2\xe6\x96\x87\xe6\x9c\xac'
  7. In [7]: type(text)
  8. Out[7]: str
  9. In [8]: type(bytes_text)
  10. Out[8]: bytes
  11. In [9]: decoded_text = bytes_text.decode()
  12. In [10]: decoded_text
  13. Out[10]: '一串文本'

其中decode()与encode()方法可以接受参数,其声明分别为:

  1. bytes.decode(encoding="utf-8", errors="strict")
  2. str.encode(encoding="utf-8", errors="strict")

其中的encoding是指在解码编码过程中使用的编码(此处指“编码方案”是名词),errors是指错误的处理方案。

详细的可以参照官方文档:

5. udp端口绑定

  • 一个udp网络程序,运行时没有绑定端口,系统会给它分配一个随机的端口,如果再次运行,端口可能发生变化
  • 一个udp网络程序,也可以绑定信息(ip地址,端口号),如果绑定成功,那么操作系统用这个端口号来进行区别收到的网络数据是否是此进程的

什么时候需要绑定端口呢?

一般来说,如果要做成一个服务端的应用程序的话,是需要绑定固定端口的。

python网络编程-udp的更多相关文章

  1. Python网络编程UDP服务器与客服端简单例子

    [转载] https://blog.csdn.net/hu330459076/article/details/7868028 UDP服务器代码: #!/usr/bin/env python # -*- ...

  2. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  3. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  4. python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理

    作为一个php程序员,同时有对网络方面感兴趣,php就比较蛋疼了,所以就抽了些时间看python 之前学python基础因为工作原因,断断续续的看了个基础,差不多是可以写代码了 最近在看<pyt ...

  5. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  6. Python 网络编程(一)

    Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  7. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  8. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  9. Python 网络编程相关知识学习

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

随机推荐

  1. Delphi Excel导入 的通用程序

    步骤: 1 连excel(自己知道其格式,最好是没个字段在数据一一对应) 2 读excel数据,填入到数据库 我这里有个函数,实现把excel表格中数据导入数据库,在一条数据导入前判断数据库中是否有该 ...

  2. OO第一次博客总结

    虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...

  3. 应用篇 = Docker下的Redis

    一.工具介绍 1.1 什么是Docker? Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目.使用 Google 公司推出的 Go 语言 ...

  4. win10 系统下无法正常安装 Anaconda3

    最近国庆两天,突然心血来潮重装了一遍系统,重装成了win10系统以后毛病百出哇,昨天和今天一直在解决一个问题,那就是安装Anaconda3的时候出现不了快捷方式,如下图这样只有一个快捷方式(在win7 ...

  5. Handshake failed due to invalid Upgrade header: null 解决方案

    Handshake failed due to invalid Upgrade header: null 解决方案 解决方案,在 Nginx ,location 中添加以下代码: proxy_set_ ...

  6. java并发机制锁的类型和实现

    synchronized 和 volatile,是最基础的两个锁! volatile是轻量级锁,它在多核处理器开发中保证了共享变量的可见性.即当一个线程修改一个共享变量时,其他线程能够读到这个修改的值 ...

  7. OAuth2.0深入理解

    1. OAuth2.0深入理解 1.1. 概念 OAuth(Open Authorization)开放授权,表示将系统功能部分授权给第三方系统调用,实现更细颗粒度的权限控制 OAuth是一种在线授权或 ...

  8. iOS学习——iOS开发小知识点集合

    在iOS学习和开发过程中,经常会遇到一些很小的知识点和问题,一两句话就可以解释清楚了,这样的知识点写一篇随笔又没有必要,但是又想mark一下,以备不时之需,所以就有了本文.后面遇到一些小的知识点会不断 ...

  9. golang IO streaming

    IO Streaming Streaming IO in Go,引用此文,略有修改 io.Reader和io.Writer io.Reader接口定义了从传输缓存读取数据 type Reader in ...

  10. asp.net core mvc发布后显示异常错误信息的方法

    在发布的项目文件夹中找到web.config文件,修改: <aspNetCore processPath="dotnet" arguments=".\Cloud.B ...