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 THREADING模块中的JOIN()方法深入理解
Feb 18 Python
Python中统计函数运行耗时的方法
May 05 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
Windows系统下多版本pip的共存问题详解
Oct 10 Python
python如何将图片转换为字符图片
Aug 19 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
python实现微信自动回复及批量添加好友功能
Jul 03 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
jquery 学习之二 属性相关
2010/11/23 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
js预载入和JavaScript Image()对象使用介绍
2011/08/28 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
详解python中executemany和序列的使用方法
2017/08/12 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
常用的10个Python实用小技巧
2020/08/10 Python
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
汽修专业学生自我鉴定
2013/11/16 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
校园环保建议书
2014/05/14 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
员工自我评价范文
2015/03/11 职场文书
美容院员工规章制度
2015/08/05 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
学校就业保障协议书
2019/06/24 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript