一、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.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Python连载52-SOCKET编程示例的更多相关文章

  1. python基础之socket编程 (转自林海峰老师)

    python基础之socket编程   阅读目录 一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 ...

  2. Python 基础之socket编程(二)

    Python 基础之socket编程(二) 昨天只是对socket编程做了简单的介绍,只是把socket通信的框架搭建起来,要对其中的功能进行进一步的扩充,就来看看今天的料哈! 一.基于tcp的套接字 ...

  3. 多线程Java Socket编程示例

    package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...

  4. Python 基础之socket编程(三)

    python 基础之socket编程(三) 前面实现的基于socket通信只能实现什么呢?在tcp协议的通信中就是一个用户说一句,服务端给你回一句,你再给服务端说一句,服务端再给你回一句,就这样一直友 ...

  5. Python 基础之socket编程(一)

    Python 基础之socket编程(一) 可以进行通信玩儿了,感觉不错不错,网络通信就像打电话,我说一句你听一句之后,你再说一句,我听一句,就这样.....下去了.不扯淡了,来来来,看看今天都搞了点 ...

  6. Python Socket 编程示例 Echo Server

    简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...

  7. 十三python基础之socket编程

      阅读目录 一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 八 基于UDP的套接字 九 粘包现 ...

  8. python基础之socket编程

    一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 八 基于UDP的套接字 九 粘包现象 十 什么是 ...

  9. Linux socket编程示例(最简单的TCP和UDP两个例子)

    一.socket编程 网络功能是Uinux/Linux的一个重要特点,有着悠久的历史,因此有一个非常固定的编程套路. 基于TCP的网络编程: 基于连接, 在交互过程中, 服务器和客户端要保持连接, 不 ...

  10. python进阶---Python中的socket编程

    初识socket编程 一.前言 socket基于C\S架构(客户端\服务端)的编程模型,在Python中是以socket模块存在的. Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是 ...

随机推荐

  1. zipalign的使用

    zipalign 是一个存档对齐工具,可为Android应用程序(.apk)文件提供重要的优化.目的是确保所有未压缩数据以相对于文件开头的特定对齐开始.具体来说,它会导致.apk中的所有未压缩数据(如 ...

  2. Linux中jar包启动和jar包后台运行

    Linux 运行jar包命令如下: 方式一: java -jar shareniu.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? ...

  3. PHP计算二维数组指定元素的和

    array_sum(array_column($arr, 'num')); //计算二维数组指定元素的和 $arr = [ [ 'id'=>1, 'num'=>3, ], [ 'id'=& ...

  4. C#中巧用妙法避免嵌套方式使用两个foreach循环

    问题:需要对DataGridViewRow的下拉框列Item2所选内容进行判断,看是否跟数据库里面某个配置表的数据列Item1匹配.如果用两个foreach循环进行匹配,会导致逻辑复杂而且容易只bre ...

  5. 百度BAE专业版申购SSL证书

    这几天开发了一个小程序,本来想放到BAE基础版的,但是基础版现在不能再新增项目了,想了一下,出点血,配了个专业版.但是专业版的SSL证书是需要配的,而小程序必须使用https,所有必须申请一个证书.在 ...

  6. 10-Node.js学习笔记-异步函数

    异步函数 异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,是代码变得清晰明了 const fn = async()=>{} async fu ...

  7. C++ std::array 基本用法

    #include <iostream> #include <string> #include <array> using namespace std; // htt ...

  8. Tomcat9+JDK 13报错Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program

    Tomcat使用的是https://tomcat.apache.org/download-90.cgi Tomcat9 之前安装的JDK 13,有JAVA_HOME环境变量地址(C:\Program ...

  9. mysql 读写分离(手动和自动方法)

    使用sqlalchemy 使mysq自动读写分离: 代码如下: from flask import Flask from flask_sqlalchemy import SQLAlchemy, Sig ...

  10. 织女星开发板调试器升级为Jlink固件

    前言 为了能使用板载的FreeLink调试器来调试RISC-V内核,我们需要把默认的CMSIC-DAP固件,升级为JLink固件,固件升级之后,通过选择使用不同的驱动程序,来支持ARM内核还是RISC ...