Python连载52-SOCKET编程示例
一、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编程示例的更多相关文章
- python基础之socket编程 (转自林海峰老师)
python基础之socket编程 阅读目录 一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 ...
- Python 基础之socket编程(二)
Python 基础之socket编程(二) 昨天只是对socket编程做了简单的介绍,只是把socket通信的框架搭建起来,要对其中的功能进行进一步的扩充,就来看看今天的料哈! 一.基于tcp的套接字 ...
- 多线程Java Socket编程示例
package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...
- Python 基础之socket编程(三)
python 基础之socket编程(三) 前面实现的基于socket通信只能实现什么呢?在tcp协议的通信中就是一个用户说一句,服务端给你回一句,你再给服务端说一句,服务端再给你回一句,就这样一直友 ...
- Python 基础之socket编程(一)
Python 基础之socket编程(一) 可以进行通信玩儿了,感觉不错不错,网络通信就像打电话,我说一句你听一句之后,你再说一句,我听一句,就这样.....下去了.不扯淡了,来来来,看看今天都搞了点 ...
- Python Socket 编程示例 Echo Server
简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...
- 十三python基础之socket编程
阅读目录 一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 八 基于UDP的套接字 九 粘包现 ...
- python基础之socket编程
一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 八 基于UDP的套接字 九 粘包现象 十 什么是 ...
- Linux socket编程示例(最简单的TCP和UDP两个例子)
一.socket编程 网络功能是Uinux/Linux的一个重要特点,有着悠久的历史,因此有一个非常固定的编程套路. 基于TCP的网络编程: 基于连接, 在交互过程中, 服务器和客户端要保持连接, 不 ...
- python进阶---Python中的socket编程
初识socket编程 一.前言 socket基于C\S架构(客户端\服务端)的编程模型,在Python中是以socket模块存在的. Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是 ...
随机推荐
- zipalign的使用
zipalign 是一个存档对齐工具,可为Android应用程序(.apk)文件提供重要的优化.目的是确保所有未压缩数据以相对于文件开头的特定对齐开始.具体来说,它会导致.apk中的所有未压缩数据(如 ...
- Linux中jar包启动和jar包后台运行
Linux 运行jar包命令如下: 方式一: java -jar shareniu.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? ...
- PHP计算二维数组指定元素的和
array_sum(array_column($arr, 'num')); //计算二维数组指定元素的和 $arr = [ [ 'id'=>1, 'num'=>3, ], [ 'id'=& ...
- C#中巧用妙法避免嵌套方式使用两个foreach循环
问题:需要对DataGridViewRow的下拉框列Item2所选内容进行判断,看是否跟数据库里面某个配置表的数据列Item1匹配.如果用两个foreach循环进行匹配,会导致逻辑复杂而且容易只bre ...
- 百度BAE专业版申购SSL证书
这几天开发了一个小程序,本来想放到BAE基础版的,但是基础版现在不能再新增项目了,想了一下,出点血,配了个专业版.但是专业版的SSL证书是需要配的,而小程序必须使用https,所有必须申请一个证书.在 ...
- 10-Node.js学习笔记-异步函数
异步函数 异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,是代码变得清晰明了 const fn = async()=>{} async fu ...
- C++ std::array 基本用法
#include <iostream> #include <string> #include <array> using namespace std; // htt ...
- 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 ...
- mysql 读写分离(手动和自动方法)
使用sqlalchemy 使mysq自动读写分离: 代码如下: from flask import Flask from flask_sqlalchemy import SQLAlchemy, Sig ...
- 织女星开发板调试器升级为Jlink固件
前言 为了能使用板载的FreeLink调试器来调试RISC-V内核,我们需要把默认的CMSIC-DAP固件,升级为JLink固件,固件升级之后,通过选择使用不同的驱动程序,来支持ARM内核还是RISC ...