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远程登录代码
Apr 29 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
Python数据类型详解(一)字符串
May 08 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
python plotly绘制直方图实例详解
Jul 22 Python
django 中QuerySet特性功能详解
Jul 25 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
Sep 16 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
Python列表元素删除和remove()方法详解
Jan 04 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中如何防止表单的重复提交
2013/08/02 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python守护线程用法实例
2017/06/23 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
新郎父亲婚宴答谢词
2014/01/11 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
刑事案件上诉状
2015/05/23 职场文书
阿凡达观后感
2015/06/10 职场文书
爱护公物主题班会
2015/08/17 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android
关于python中模块和重载的问题
2021/11/02 Python
Java的Object类的九种方法
2022/04/13 Java/Android