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代码
Mar 13 Python
python服务器端收发请求的实现代码
Sep 29 Python
深入探究Python中变量的拷贝和作用域问题
May 05 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
Python3 中文文件读写方法
Jan 23 Python
python列表生成式与列表生成器的使用
Feb 23 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
python3 实现调用串口功能
Dec 26 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
Pytorch中.new()的作用详解
Feb 18 Python
python 利用toapi库自动生成api
Oct 19 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设计模式之状态模式定义与用法详解
2018/04/02 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
javascript的事件描述
2006/09/08 Javascript
可实现多表单提交的javascript函数
2007/08/01 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
python创建和删除目录的方法
2015/04/29 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
pycharm的python_stubs问题
2020/04/08 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
python实现在线翻译
2020/06/18 Python
Python利用命名空间解析XML文档
2020/08/10 Python
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
用友笔试题目
2016/10/25 面试题
营销人才自我鉴定范文
2013/12/25 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
工程技术员岗位职责
2014/03/02 职场文书
企业读书活动总结
2014/06/30 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
十月围城观后感
2015/06/08 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server