基于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通信的更多相关文章

  1. Python网络编程——修改套接字发送和接收的缓冲区大小

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...

  2. Python网络编程——处理套接字错误

    在网络应用中,经常会遇到这种情况:一方尝试连接,但另一方由于网络媒介失效或者其他原因无法响应. Python的Socket库提供了一个方法,能通过socket.error异常优雅地处理套接字错误. 1 ...

  3. unix网络编程——TCP套接字编程

    TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...

  4. python网络编程-socket套接字通信循环-粘包问题-struct模块-02

    前置知识 不同计算机程序之间数据的传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...

  5. 初探网络编程--TCP套接字编程演示

    今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...

  6. TCP/IP网络编程之套接字类型与协议设置

    套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为 ...

  7. 【TCP/IP网络编程】:01理解网络编程和套接字

    1.网络编程和套接字 网络编程与C语言中的printf函数和scanf函数以及文件的输入输出类似,本质上也是一种基于I/O的编程方法.之所以这么说,是因为网络编程大多是基于套接字(socket,网络数 ...

  8. TCP/IP网络编程之网络编程和套接字

    网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...

  9. UNIX网络编程——原始套接字(dos攻击)

    原始套接字(SOCK_RAW).应用原始套接字,我们可以编写出由TCP和UDP套接字不能够实现的功能. 注意原始套接字只能够由有 root权限的人创建. 可以参考前面的博客<<UNIX网络 ...

  10. UNIX网络编程——原始套接字的魔力【续】

    如何从链路层直接发送数据帧 上一篇里面提到的是从链路层"收发"数据,该篇是从链路层发送数据帧. 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑 ...

随机推荐

  1. CMU15445 (Fall 2020) 数据库系统 Project#2 - B+ Tree 详解(下篇)

    前言 上一篇博客中实现了单线程 B+ 树的查找.插入.删除和迭代操作,这篇博客将完成实验二的剩余任务:并发 B+ 树.实现 B+ 树并发访问最简单的方法就是在整棵树上加一把大锁,但是这样会导致过多线程 ...

  2. C++面试八股文:在C++中,有哪些可执行体?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第14面: 面试官:在C++中,有哪些可执行体? 二师兄:可执行体? 面试官:也就是可调用对象. 二师兄:让我想一想.函数.函数指针.类的静态方法.类 ...

  3. 一分钟学一个 Linux 命令 - find 和 grep

    前言 大家好,我是 god23bin.欢迎来到<一分钟学一个 Linux 命令>系列,每天只需一分钟,记住一个 Linux 命令不成问题.今天需要你花两分钟时间来学习下,因为今天要介绍的是 ...

  4. 2. 搭建Mybatis

    确认开发环境​ MySQL不同版本的注意事项 1.驱动类driver-class-name MySQL 5版本使用jdbc5驱动,驱动类使用:com.mysql.jdbc.Driver MySQL 8 ...

  5. Kubernetes(k8s)访问控制:权限管理之RBAC鉴权

    目录 一.系统环境 二.前言 三.Kubernetes访问控制 四.鉴权简介 五.配置客户端机器 六.设置k8s集群允许所有请求访问 七.设置k8s集群拒绝所有请求访问 八.RBAC授权 8.1 ro ...

  6. iOS 百度导航没有语音播报

    1.百度地图没有语音播报 可以尝试如下方式: 1.tts确认相关key正确,可以放入官方demo测试 2.setting中 Product Name 尝试设置成英文,在info.plist设置Bund ...

  7. 深度学习(四)——torchvision中数据集的使用

    一. 科研数据集 下载链接: https://pytorch.org/vision/stable/index.html 本文中我们使用的是\(CIFAR\)数据集 二.CIFAR10数据集详解 具体网 ...

  8. 家人们,我把B站首页写出来了!!!

    在学习HTML5和CSS3的过程中,总是感觉没有一个完全自己做出来的页面,一直在各大网站上面寻找合适的适合自己去仿写的页面代码,奈何找了很久都没有找到,在CSDN上找的各种什么电商页面,小米商城页面之 ...

  9. 用 Tensorflow.js 做了一个动漫分类的功能(一)

    前言: 浏览某乎网站时发现了一个分享各种图片的博主,于是我顺手就保存了一些.但是一张一张的保存实在太麻烦了,于是我就想要某虫的手段来处理.这样保存的确是很快,但是他不识图片内容,最近又看了 mobil ...

  10. redux的三个概念与三大核心

    1.什么是redux?一个组件里可能会有很多的状态,比如控制某个内容显示的flag,从后端获取的展示数据,那么这些状态可以在自己的单个页面进行管理,也可以选择别的管理方式,redux就是是一种状态管理 ...