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实现问号表达式(?)的方法
Nov 27 Python
Python获取任意xml节点值的方法
May 05 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
Numpy数组转置的两种实现方法
Apr 17 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
python实现zabbix发送短信脚本
Sep 17 Python
python assert的用处示例详解
Apr 01 Python
python实时检测键盘输入函数的示例
Jul 17 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
Jul 31 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
python垃圾回收机制(GC)原理解析
Dec 30 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 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小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
php实现登录页面的简单实例
2019/09/29 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
canvas绘制多边形
2017/02/24 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
详解vue中组件参数
2018/07/09 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
Python sys.path详细介绍
2013/10/17 Python
python条件和循环的使用方法
2013/11/01 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
Python使用configparser库读取配置文件
2020/02/22 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
致跳高运动员广播稿
2014/01/13 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android