Python实现TCP通信的示例代码


Posted in Python onSeptember 09, 2019

使用socket实现tcp通信,需导入socket模块

1、服务端

主要步骤:

(1)创建socket:socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

family:AF_INET , AF_INET6, AF_UNIX, AF_CAN, AF_PACKET,  AF_RDS

type:SOCK_STREAM , SOCK_DGRAM, SOCK_RAW,或者其他SOCK_*

proto:一般使用默认值0

fileno:一般使用默认值

(2)绑定IP和端口号:socket.bind(address)

address:使用(host,port)元组即可

(3)监听:socket.listen([backlog])

backlog:就理解为最大连接数

(4)接受连接:socket.accept()

返回(conn,address)元组,分别是已连接客户端的socket对象和地址

(5)发送/接受数据:socket.recv(bufsize[, flags])/socket.send(bytes[, flags])

bufsize:接收的数据最大字节数

bytes:需要发送的数据字节数

(6)关闭连接:socket.close()

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:tcpserver.py
 
import socket
import time
MaxBytes=1024*1024
 
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.settimeout(60)
host = '127.0.0.1'
#host = socket.gethostname()
port = 11223
server.bind((host, port))    # 绑定端口
 
server.listen(1)           # 监听
try:
  client,addr = server.accept()     # 等待客户端连接
  print(addr," 连接上了")
  while True:
    data = client.recv(MaxBytes)
    if not data:
      print('数据为空,我要退出了')
      break
    localTime = time.asctime( time.localtime(time.time()))
    print(localTime,' 接收到数据字节数:',len(data))
    print(data.decode())
    client.send(data)
except BaseException as e:
  print("出现异常:")
  print(repr(e))
finally:
  server.close()          # 关闭连接
  print("我已经退出了,后会无期")

这个实例没有创建其他线程,也只接收一个客户端的连接;为了能手动结束或自动结束accept和recv的阻塞,设置了超时60秒,并将主体部分放入到try语句中;将socket的关闭放到finally块中,可以防止程序异常退出,而导致没有调用close函数。

2、客户端

主要步骤:

(1)创建socket:socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

(2)连接:socket.connect(address)

address:使用(host,port)元组即可

(3)发送/接受数据:socket.recv(bufsize[, flags])/socket.send(bytes[, flags])

(4)关闭连接:socket.close() 

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:tcpclient.py
 
import socket
import time
MaxBytes=1024*1024
host ='127.0.0.1'
port = 11223
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.settimeout(30)
client.connect((host,port))
while True:
  inputData=input();     #等待输入数据
  if(inputData=="quit"):
    print("我要退出了,再见")
    break
  sendBytes = client.send(inputData.encode())
  if sendBytes<=0:
    break;
  recvData = client.recv(MaxBytes)
  if not recvData:
    print('接收数据为空,我要退出了')
    break
  localTime = time.asctime( time.localtime(time.time()))
  print(localTime, ' 接收到数据字节数:',len(recvData))
  print(recvData.decode())
client.close()
print("我已经退出了,后会无期")

以上客户端连接成功后等待用户输入,然后将输入信息发送到服务端,服务端将数据原样返回给客户端,如果客户端输入quit就会跳出循环并关闭socket,这时服务端recv会返回空从而跳出循环并关闭socket。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
python实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
Python AES加密实例解析
Jan 18 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
从django的中间件直接返回请求的方法
May 30 Python
3个用于数据科学的顶级Python库
Sep 29 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
python移位运算的实现
Jul 15 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
使用Python刷淘宝喵币(低阶入门版)
Oct 30 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
Python爬取网页信息的示例
Sep 24 Python
Python3使用PySynth制作音乐的方法
Sep 09 #Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 #Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 #Python
pymysql模块的使用(增删改查)详解
Sep 09 #Python
Django之模板层的实现代码
Sep 09 #Python
Django模板语言 Tags使用详解
Sep 09 #Python
Python中turtle库的使用实例
Sep 09 #Python
You might like
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python多进程原理与用法分析
2018/08/21 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
python中删除某个元素的方法解析
2019/11/05 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
中秋晚会活动方案
2014/08/31 职场文书
个人授权委托书范本
2014/09/14 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
毕业酒会致辞
2015/07/29 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL