Python使用socket去实现TCP客户端和TCP服务端


Posted in Python onApril 12, 2022

一、基于socket实现的TCP客户端

import socket
 
# 建立socket对象
# 参数一表示IP地址类型(AF_INET为IPV4,AF_INET6为IPV6),参数二表示连接的类型(SOCK_STREAM表示TCP形式,SOCK_DGRAM表示UDP形式)
client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # 代表(ipv4,TCP)
 
# 连接服务器(元组中填目标ip地址和端口号)
client_socket.connect(('127.0.0.1',7777))
# 准备数据,需要转换为二进制数据,encode()中填写的是本地的字符串编码格式,mac、linux填utf-8
data='hello'.encode('gbk')
# 向服务器发送数据
client_socket.send(data)
# 接收数据,必须要指定接收数据的大小,单位字节,最大4096,即4k
recv_data=client_socket.recv(1024)
# 接收的数据要进行decode()解码,发送的时候用啥编码就填啥编码
recv_data=recv_data.decode('gbk')
print(recv_data)
# 关闭连接
client_socket.close()

二、基于socket实现的TCP服务端

import socket
# 建立socket对象
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 如果服务器是一次性的,如果服务器结束后马上重新启动会出现一个错误,原因是地址和端口没有被释放
# OSError: [Errno 48] Address already in use
# 如果想马上释放,要设置一下socket选项
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
# 绑定IP和端口,如果在绑定IP时没有给定IP,默认是绑定本地IP
server_socket.bind(('',7777))
# 设置监听(最大监听数),设置完后服务端会进入被动模式,不能主动连接客户端,只能被动地等待客户端的连接
server_socket.listen(128)
# 等待客户端连接,连接上后,函数会返回客户端的Socket对象和地址信息
client_socket,ip_port=server_socket.accept()
print(f'客户端{ip_port[0]}使用端口{ip_port[1]}连接成功...')
# 接收客户端数据
data=client_socket.recv(1024)
# 查看客户端发送的数据长度
if len(data)!=0:
    data=data.decode('gbk')
    print(f'客户端{ip_port[0]}使用端口{ip_port[1]}发送是数据是{data}')
else:
    print(f'客户端{ip_port[0]}使用端口{ip_port[1]}关闭了连接')
 
# 给客户端发送数据
data='你好'.encode('gbk')
client_socket.send(data)
# 关闭客户端
client_socket.close()
# 关闭服务端
server_socket.close()

到此这篇关于Python基于socket实现TCP客户端和服务端的文章就介绍到这了!

Python 相关文章推荐
Python isinstance判断对象类型
Sep 06 Python
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
举例讲解Python中的算数运算符的用法
May 13 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
详解python实现交叉验证法与留出法
Jul 11 Python
Django实现web端tailf日志文件功能及实例详解
Jul 28 Python
python实现将字符串中的数字提取出来然后求和
Apr 02 Python
python实现三壶谜题的示例详解
Nov 02 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 Python
Python闭包的定义和使用方法
Apr 11 #Python
什么是Python装饰器?如何定义和使用?
Apr 11 #Python
Python经常使用的一些内置函数
python处理json数据文件
Python几种酷炫的进度条的方式
Python通过loop.run_in_executor执行同步代码 同步变为异步
Python Pandas解析读写 CSV 文件
You might like
php表单转换textarea换行符的方法
2010/09/10 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
Python创建日历实例
2014/08/21 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
酒店实习个人鉴定
2013/12/07 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书