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的Django框架中创建模板库的方法
Jul 20 Python
详解Python的Django框架中的中间件
Jul 24 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 Python
Python常用的爬虫技巧总结
Mar 28 Python
浅谈python中的占位符
Nov 09 Python
python读取和保存图片5种方法对比
Sep 12 Python
解决Python plt.savefig 保存图片时一片空白的问题
Jan 10 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
python标准库OS模块详解
Mar 10 Python
pycharm 复制代码出现空格的解决方式
Jan 15 Python
Python List remove()实例用法详解
Aug 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
摩卡咖啡
2021/03/03 咖啡文化
PHP使用数组实现队列
2012/02/05 PHP
浅析is_writable的php实现
2013/06/18 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
php读取本地json文件的实例
2018/03/07 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
JS 控件事件小结
2012/10/31 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
python采集博客中上传的QQ截图文件
2014/07/18 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
使用tensorflow实现线性svm
2018/09/07 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
学期自我评价
2014/01/27 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
如何用python清洗文件中的数据
2021/06/18 Python
MySQL 四种连接和多表查询详解
2021/07/16 MySQL