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里对list中的整数求平均并排序
Sep 12 Python
python实现的文件夹清理程序分享
Nov 22 Python
浅谈python多线程和队列管理shell程序
Aug 04 Python
Python多进程分块读取超大文件的方法
Apr 13 Python
python线程、进程和协程详解
Jul 19 Python
Python获取当前公网ip并自动断开宽带连接实例代码
Jan 12 Python
python实现验证码识别功能
Jun 07 Python
Python 忽略warning的输出方法
Oct 18 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 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
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
PHP生成带有雪花背景的验证码
2008/09/28 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
Python 基础知识之字符串处理
2017/01/06 Python
python中pip的安装与使用教程
2018/08/10 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
个人职业生涯规划书1500字
2013/12/31 职场文书
学校招生宣传广告词
2014/03/19 职场文书
离婚协议书范本2014
2014/10/27 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
公司食堂管理制度
2015/08/05 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
利用Python多线程实现图片下载器
2022/03/25 Python
JavaScript实现两个数组的交集
2022/03/25 Javascript