1. 创建socket

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

import socket
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套接字):

import socket

# 创建udp socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # ...
# 使用套接字收/发数据 # 关闭socket
udp_socket.close()

说明:

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

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

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

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

  1. 创建客户端套接字
  2. 发送/接收数据
  3. 关闭套接字
import socket

def main():
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 读取输入的数据
send_data = input('请输入要发送的数据:') # 发送数据
send_addr = ('192.168.92.190', 7878)
udp_socket.sendto(send_data.encode('GBK'), send_addr) # 关闭
udp_socket.close() if __name__ == '__main__':
main()

在ubuntu的终端中执行:

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

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

import socket

def main():

        # 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定一个本地信息
localaddr = ("", 8080)
udp_socket.bind(localaddr) # 接收数据
recv_data = udp_socket.recvfrom(1024) # recv_data是一个元组(接收到的数据, (发送方的IP, port))
recv_msg = recv_data[0] # 存储接收到的数据
send_addr = recv_data[1] # 存储发送方的地址 # 打印收到的消息
# print(recv_data)
print("%s:%s" % (str(send_addr), recv_msg.decode('GBK'))) # 关闭
udp_socket.close() if __name__ == '__main__':
main()

在ubuntu的终端中执行:

在网咯助手中发送数据:

4. python3中的编码转换

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

在ipython3中尝试:

In [2]: text = "一串文本"

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

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

bytes.decode(encoding="utf-8", errors="strict")
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. ElasticSearch写入数据的工作原理是什么?

    面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基 ...

  2. Android Studio 3.0 变化之 implementation与compile

    Android Studio 3.0 出来很久了,本文就着重介绍一下 新版本中 Moudle 中 build.gradle 文件中的变化. 我们来看看新建一个项目在 Moudle 中的 depende ...

  3. ajax&bootstrap

    1.ajax 后台 # 通过flask框架搭建后台 from flask import flask,request # 创建一个服务器对象 app = Flask(__name__) # 解决ajax ...

  4. linux下 几个常用makefile模板,亲测可用

    一 生成动态链接库的模板: ####################### # Makefile ####################### # compile and lib parameter ...

  5. ORM基本操作回顾

    连接数据库 默认是MySQLdb 指定引擎 dialect[+driver]: //user:password@host/dbname[?key=value..]: from sqlalchemy i ...

  6. [2019BUAA软工助教]第0次代码作业

    [2019BUAA软工助教]第0次代码作业 前言 本博客为完成结对项目所需的先导知识,题目不难,请认真对待 :) 欢迎来到软件工程 :) 注:本次实验为附加作业,不做不扣分,做了有附加分 Part 0 ...

  7. 微信小程序内嵌业务域名内的网页

    微信小程序在2017年11月左右开放了内嵌网页的功能,即新组件<web-view>.官方文档链接:https://mp.weixin.qq.com/debug/wxadoc/dev/com ...

  8. 【原】以setTimeout来聊聊Event Loop

    平时的工作中,也许你会经常用到setTimeout这个方法,可是你真的了解setTimeout吗?本文想通过总结setTimeout的用法,顺便来探索javascript里面的事件执行机制. setT ...

  9. 如何走上更高平台分享传递干货知识:(开通个人Github面向开源及私有软件项目的托管平台:https://github.com/zlslch/)(图文详解)(博主推荐)

    不多说,直接上干货! https://github.com/ 欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑       同时,大家可以关注我的个人博客:    http ...

  10. How Tomcat works — 二、tomcat启动(1)

    主要介绍tomcat启动涉及到的一些接口和类. 目录 概述 tomcat包含的组件 server和service Lifecycle Container Connector 总结 概述 tomcat作 ...