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中的list列表及其切片和迭代操作
Mar 13 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
用Python shell简化开发
Aug 08 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
PyQt5 多窗口连接实例
Jun 19 Python
python for循环remove同一个list过程解析
Aug 14 Python
python科学计算之scipy——optimize用法
Nov 25 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Python request post上传文件常见要点
Nov 20 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 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模板引擎Smarty的缓存使用总结
2014/04/24 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
Javascript调用C#代码
2011/01/17 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
python回调函数用法实例分析
2015/05/09 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
python实现类之间的方法互相调用
2018/04/29 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
什么是serialVersionUID
2016/03/04 面试题
期末个人总结范文
2015/02/13 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
入团申请书格式
2019/06/20 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python
oracle重置序列从0开始递增1
2022/02/28 Oracle