Python网络编程——TCP套接字通信、通信循环、链接循环、UDP通信
基于TCP的套接字通信
以买手机的过程为例
服务端代码
import socket
# 1、买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 流式协议=》tcp协议
# 2、绑定手机卡
phone.bind(('127.0.0.1', 8081)) # 0-65535, 1024以前的都被系统保留使用
# 3、开机
phone.listen(5) # 5指的是半连接池的大小
print('服务端启动完成,监听地址为:%s:%s' % ('127.0.0.1', 8080))
# 4、等待电话连接请求:拿到电话连接conn
conn, client_addr = phone.accept()
# print(conn)
print("客户端的ip和端口:", client_addr)
# 5、通信:收\发消息
data = conn.recv(1024) # 最大接收的数据量为1024Bytes,收到的是bytes类型
print("客户端发来的消息:", data.decode('utf-8'))
conn.send(data.upper())
# 6、关闭电话连接conn(必选的回收资源的操作)
conn.close()
# 7、关机(可选操作)
phone.close()
客户端代码
import socket
#1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 流式协议=》tcp协议
#2、拨通服务端电话
phone.connect(('127.0.0.1',8081))
#3、通信
import time
time.sleep(10)
phone.send('hello egon 哈哈哈'.encode('utf-8'))
data=phone.recv(1024)
print(data.decode('utf-8'))
#4、关闭连接(必选的回收资源的操作)
phone.close()
加上通信循环
服务端
import socket
# 1、买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 流式协议=》tcp协议
# 2、绑定手机卡
phone.bind(('127.0.0.1', 8083)) # 0-65535, 1024以前的都被系统保留使用
# 3、开机
phone.listen(5) # 5指的是半连接池的大小
print('服务端启动完成,监听地址为:%s:%s' % ('127.0.0.1', 8080))
# 4、等待电话连接请求:拿到电话连接conn
conn, client_addr = phone.accept()
# 5、通信:收\发消息
while True:
try:
data = conn.recv(1024) # 最大接收的数据量为1024Bytes,收到的是bytes类型
if len(data) == 0:
# 在unix系统洗,一旦data收到的是空
# 意味着是一种异常的行为:客户度非法断开了链接
break
print("客户端发来的消息:", data.decode('utf-8'))
conn.send(data.upper())
except Exception:
# 针对windows系统
break
# 6、关闭电话连接conn(必选的回收资源的操作)
conn.close()
# 7、关机(可选操作)
phone.close()
客户端
import socket
# 1、买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 流式协议=》tcp协议
# 2、拨通服务端电话
phone.connect(('127.0.0.1', 8083))
# 3、通信
while True:
msg = input("输入要发送的消息>>>: ").strip() # msg=''
if len(msg) == 0:
continue
phone.send(msg.encode('utf-8'))
print('======?')
data = phone.recv(1024)
print(data.decode('utf-8'))
# 4、关闭连接(必选的回收资源的操作)
phone.close()
加上链接循环
服务端应该满足的特点: 1、一直提供服务 2、并发地提供服务
# 服务端
import socket
# 1、买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 流式协议=》tcp协议
# 2、绑定手机卡
phone.bind(('127.0.0.1', 8080)) # 0-65535, 1024以前的都被系统保留使用
# 3、开机
phone.listen(5) # 5指的是半连接池的大小
print('服务端启动完成,监听地址为:%s:%s' % ('127.0.0.1', 8080))
# 4、等待电话连接请求:拿到电话连接conn
# 加上链接循环
while True:
conn, client_addr = phone.accept()
# 5、通信:收\发消息
while True:
try:
data = conn.recv(1024) # 最大接收的数据量为1024Bytes,收到的是bytes类型
if len(data) == 0:
# 在unix系统洗,一旦data收到的是空
# 意味着是一种异常的行为:客户度非法断开了链接
break
print("客户端发来的消息:", data.decode('utf-8'))
conn.send(data.upper())
except Exception:
# 针对windows系统
break
# 6、关闭电话连接conn(必选的回收资源的操作)
conn.close()
# 7、关机(可选操作)
phone.close()
客户端1
import socket
#1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 流式协议=》tcp协议
#2、拨通服务端电话
phone.connect(('127.0.0.1',8080))
#3、通信
while True:
msg=input("输入要发送的消息>>>: ").strip() #msg=''
if len(msg) == 0:continue
phone.send(msg.encode('utf-8'))
print('======?')
data=phone.recv(1024)
print(data.decode('utf-8'))
#4、关闭连接(必选的回收资源的操作)
phone.close()
基于UDP协议的套接字通信
服务端
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议=》udp协议
server.bind(('127.0.0.1', 8081))
while True:
data, client_addr = server.recvfrom(1024)
server.sendto(data.upper(), client_addr)
server.close()
客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 流式协议=》tcp协议
while True:
msg = input('>>>: ').strip()
client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8081))
res = client.recvfrom(1024)
print(res)
client.close()
Python网络编程——TCP套接字通信、通信循环、链接循环、UDP通信的更多相关文章
- Python网络编程——修改套接字发送和接收的缓冲区大小
很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...
- Python网络编程——处理套接字错误
在网络应用中,经常会遇到这种情况:一方尝试连接,但另一方由于网络媒介失效或者其他原因无法响应. Python的Socket库提供了一个方法,能通过socket.error异常优雅地处理套接字错误. 1 ...
- unix网络编程——TCP套接字编程
TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...
- python网络编程-socket套接字通信循环-粘包问题-struct模块-02
前置知识 不同计算机程序之间数据的传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- 初探网络编程--TCP套接字编程演示
今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...
- TCP/IP网络编程之套接字类型与协议设置
套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为 ...
- 【TCP/IP网络编程】:01理解网络编程和套接字
1.网络编程和套接字 网络编程与C语言中的printf函数和scanf函数以及文件的输入输出类似,本质上也是一种基于I/O的编程方法.之所以这么说,是因为网络编程大多是基于套接字(socket,网络数 ...
- TCP/IP网络编程之网络编程和套接字
网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...
- UNIX网络编程——原始套接字(dos攻击)
原始套接字(SOCK_RAW).应用原始套接字,我们可以编写出由TCP和UDP套接字不能够实现的功能. 注意原始套接字只能够由有 root权限的人创建. 可以参考前面的博客<<UNIX网络 ...
- UNIX网络编程——原始套接字的魔力【续】
如何从链路层直接发送数据帧 上一篇里面提到的是从链路层"收发"数据,该篇是从链路层发送数据帧. 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑 ...
随机推荐
- Hugging News #0616: 有几项非常重要的合作快来围观、最新中文演讲视频回放发布!
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- 2 大数据实战系列-spark shell wordcount
1 启动spark shell cd /home/data/app/hadoop/spark-2.1.1-bin-hadoop2.7/bin ./spark-shell --master spark: ...
- Java 写一个线程安全的单例模式(饱汉/饿汉)
饿汉单例 public class Singleton { private static Singleton singleton = new Singleton(); private Singleto ...
- Linux系统运维之FastDFS集群部署
一.简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.FastDFS服务端有两个 ...
- Spring 的依赖注入(DI)
前言 欢迎来到本篇文章,书接上回,本篇说说 Spring 中的依赖注入,包括注入的方式,写法,该选择哪个注入方式以及可能出现的循环依赖问题等内容. 如果正在阅读的朋友还不清楚什么是「依赖」,建议先看看 ...
- CDI的概念理解
1.CDI是什么?目的和作用是什么? 概念(是什么):是JavaEE 6标准中一个规范, 作用(干什么): 它提供了Java EE平台上服务注入的组件管理核心,简化应该是CDI的目标,让一切都可以被注 ...
- Unity的Undo:详解解析与实用案例
Unity Undo详解 在Unity中,Undo是一个非常重要的功能,它可以让开发者在编辑器中进行操作时,随时撤销之前的操作,从而避免不必要的错误.本文将详细介绍Unity Undo实现原理和使用方 ...
- TCP和UDP的应用场景
传输层的两个协议,TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议),有各自的应用场景. TCP ...
- 现代C++(Modern C++)基本用法实践:四、模板
概述 C++的模板是泛型编程思想的一种实现.C++是强类型语言,处处强调类型.同样的加法运算,int和float的加法运算需定义两个函数(重载),而使用模板则可以只用一个函数(见下面示例). 这类似我 ...
- 行行AI人才直播第12期:风平智能创始人林洪祥《AI数字人的技术实践和商业探讨》
行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 歌手孙燕姿凭借AI翻唱席卷各大视频平台.有视频博主用AI技术复活已故的奶奶,并且与之对话缅怀亲人填补遗憾.更有国外网红通过GP ...