热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python编程——基于TCP的套接字简单通信

提示:转载请注明出处,如您觉得对您有帮助,请点赞支持下。文章目录目录一、套接字是什么?二、服务端的套接字使用步骤1、

提示:转载请注明出处,如您觉得对您有帮助,请点赞支持下。

文章目录

 

目录

一、套接字是什么?

二、服务端的套接字使用步骤

1、引入库

 2、初始化套接字对象

3、同步监听客户端连接并发送消息

三、客户端的套接字使用步骤

1、引入库

 2、初始化套接字对象

 3、连接服务端和通信


 



一、套接字是什么?

套接字(Winsock)是一种独立于协议的网络编程接口,在OSI体系中集中在会话层和传输层。

各类主流编程语言基本都提供了一系列对于套接字操作的封装,Python也不例外。

以下是Python语言中套接字重要方法的相互通信示意图:

 

二、服务端的套接字使用步骤

1、引入库

inport socket # python封装的Socket库

 2、初始化套接字对象

//创建一个TCP协议的服务端Socket
server=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
//为套接字绑定IP地址和端口号
ip_port = ('127.0.0.1',9999)
server.bind(ip_port)//绑定ip和端口号
//开始监听端口号
server.listen(0)

在上述代码中最关键的是socket的初始化方法,其构造一个新的套接字对象,返回一个套接字对象实例:

sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

参数一:地址簇socket.AF_INET IPv4(默认)socket.AF_INET6 IPv6socket.AF_UNIX 只能够用于单一的Unix系统进程间通参数二:类型socket.SOCK_STREAM  流式socket , for TCP (默认)socket.SOCK_DGRAM   数据报式socket , for UDPsocket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。socket.SOCK_SEQPACKET 可靠的连续数据包服务参数三:协议0  一般不填,默认为0,系统就会根据地址格式和套接类别,自动选择一个合适的协议

bind()方法用于绑定特殊端口用于监听:

socket.bind(address) //将套接字绑定到IP地址,ddress地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。

listen()方法用于开启监听端口功能: 

socket.listen(backlog) //开始 TCP 监听。backlog 指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为 1,大部分应用程序设为 5 就可以了。


3、同步监听客户端连接并发送消息

while True:conn,addr = server.accept() #同步监听一个客户端连接请求,该方法接收到连接才会有返回值,才会继续执行print('连接地址:', addr)while True:try:data = conn.recv(1024) #接收数据print('recive:',data.decode()) #打印接收到的数据conn.send(data.upper()) #然后再发送数据except ConnectionResetError as e:print('关闭正在占线的链接!')breakconn.close()

 


三、客户端的套接字使用步骤

1、引入库

import socket

 2、初始化套接字对象

# 创建一个TCP协议的客户端Socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
//连接服务端
ip_port = ('localhost',6999)
client.connect(ip_port)

 3、连接服务端和通信

while True:msg = '你好,服务器!'client.send(msg.encode('utf-8')) #发送一条信息 python3 只接收btye流data = client.recv(1024) #接收一个信息,并指定接收的大小 为1024字节print('recv:',data.decode()) #输出我接收的信息
#关闭客户端套接字
client.close()

 

sk.send(string[,flag])

将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。

sk.recv(bufsize[,flag])

接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略

sk.settimeout(timeout)

设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )

 


推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
author-avatar
mobiledu2502868933
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有