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 30 Python
Python的pycurl包用法简介
Nov 13 Python
python脚本设置系统时间的两种方法
Feb 21 Python
在Python的Flask框架中构建Web表单的教程
Jun 04 Python
python 显示数组全部元素的方法
Apr 19 Python
TensorFlow的权值更新方法
Jun 14 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
在Python中获取两数相除的商和余数方法
Nov 10 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
常用的10个Python实用小技巧
Aug 10 Python
python本地文件服务器实例教程
May 02 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 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中实现中文字符进制转换原理分析
2011/12/06 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Python探索之ModelForm代码详解
2017/10/26 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
如何清空python的变量
2020/07/05 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
程序员经常用到的UNIX命令
2015/04/13 面试题
家长对孩子的感言
2014/03/10 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL
Python中的socket网络模块介绍
2022/07/23 Python