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的Django框架中的通用视图
May 04 Python
Python3.2模拟实现webqq登录
Feb 15 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
Python Paramiko模块的安装与使用详解
Nov 18 Python
Python入门_条件控制(详解)
May 16 Python
Python标准库笔记struct模块的使用
Feb 22 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
python实现旋转和水平翻转的方法
Oct 25 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
python 基于opencv 绘制图像轮廓
Dec 11 Python
如何用Python徒手写线性回归
Jan 25 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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中chdir()函数用法实例
2014/11/13 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
python matplotlib坐标轴设置的方法
2017/12/05 Python
python:print格式化输出到文件的实例
2018/05/14 Python
python线程的几种创建方式详解
2019/08/29 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
财务会计专业求职信范文
2013/12/31 职场文书
求职毕业生自荐书
2014/02/08 职场文书
小学家长评语大全
2014/04/16 职场文书
拓展训练激励口号
2014/06/17 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android