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中方法链的使用方法
Feb 23 Python
python中通过预先编译正则表达式提高效率
Sep 25 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
Flask配置Cors跨域的实现
Jul 12 Python
pandas 空数据处理方法详解
Nov 02 Python
python实现图片插入文字
Nov 26 Python
Jupyter Notebook折叠输出的内容实例
Apr 22 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 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
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
Vue.use源码分析
2017/04/22 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
简介Python中用于处理字符串的center()方法
2015/05/18 Python
python文件操作之目录遍历实例分析
2015/05/20 Python
Python+django实现简单的文件上传
2016/08/17 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
python中format函数如何使用
2020/06/22 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
android面试问题与答案
2016/12/27 面试题
暑期社会实践方案
2014/02/05 职场文书
效能监察建议书
2014/05/19 职场文书
物流管理专业求职信
2014/05/29 职场文书
大学生就业求职信
2014/06/12 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
安全温馨提示语大全
2015/07/14 职场文书
公司员工管理制度
2015/08/04 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
JVM钩子函数的使用场景详解
2021/08/23 Java/Android
Java中的继承、多态以及封装
2022/04/11 Java/Android