Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】


Posted in Python onOctober 12, 2019

本文实例讲述了Python 网络编程之TCP客户端/服务端功能。分享给大家供大家参考,具体如下:

demo.py(TCP客户端):

import socket
def main():
  # 1. 创建tcp的套接字
  tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 2. 链接服务器
  # tcp_socket.connect(("192.168.33.11", 7890))
  server_ip = input("请输入要链接的服务器的ip:")
  server_port = int(input("请输入要链接的服务器的port:"))
  server_addr = (server_ip, server_port)
  tcp_socket.connect(server_addr)
  # 3. 发送数据/接收数据
  send_data = input("请输入要发送的数据:")
  tcp_socket.send(send_data.encode("utf-8"))
  # 接收数据。 会阻塞代码,直到接收到数据
  recv_data = tcp_socket.recv(1024) # 1024表示本次接收的最大字节数。
  print(recv_data.decode("utf-8"))
  # 4. 关闭套接字
  tcp_socket.close()
if __name__ == "__main__":
  main()

demo.py(TCP服务端):

import socket
def main():
  # 1. 创建套接字 socket
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7890端口 (如果服务端先close,再启动服务端就不会报端口被占用的错误。)
  tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  # 2. 绑定本机ip和端口号 bind
  tcp_server_socket.bind(("", 7890))
  # 3. 监听客户端的链接请求 listen (由主动去链接服务器,变成被客户端链接)
  tcp_server_socket.listen(128) # 128影响链接客户端的数量(并发量)(和操作系统也有关)
  # 4. 接受客户端的链接 accept。 会阻塞代码,直到有客户端链接
  new_client_socket, client_addr = tcp_server_socket.accept()
  print(client_addr) # ("192.168.33.109",53766) 客户端的ip和端口
  # 接收客户端发送过来的数据。 会阻塞代码,直到接收到数据
  recv_data = new_client_socket.recv(1024) # 1024表示本次接收的最大字节数。
  print(recv_data.decode("utf-8")) # 如果recv_data为空,表示客户端断开链接
  # 写数据给客户端
  new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
  # 关闭套接字
  new_client_socket.close() # 与客户端通信的套接字
  tcp_server_socket.close() # 服务器套接字
if __name__ == "__main__":
  main()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python标准库内置函数complex介绍
Nov 25 Python
详解Python3中yield生成器的用法
Aug 20 Python
python清除字符串前后空格函数的方法
Oct 21 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
高考考python编程是真的吗
Jul 20 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
python设置中文界面实例方法
Oct 27 Python
一劳永逸彻底解决pip install慢的办法
May 24 Python
Python Collatz序列实现过程解析
Oct 12 #Python
python logging日志模块原理及操作解析
Oct 12 #Python
Python爬虫之urllib基础用法教程
Oct 12 #Python
python 生成器和迭代器的原理解析
Oct 12 #Python
python 表格打印代码实例解析
Oct 12 #Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 #Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 #Python
You might like
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
为你总结一些php系统类函数
2015/10/21 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
python创建关联数组(字典)的方法
2015/05/04 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
查看Django和flask版本的方法
2018/05/14 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
this关键字的含义
2015/04/08 面试题
工厂采购员岗位职责
2014/04/08 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
校长创先争优承诺书
2014/08/30 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
最美乡村教师观后感
2015/06/11 职场文书
教师病假条范文
2015/08/17 职场文书
学生病假条范文
2015/08/17 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers