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中enumerate的用法实例解析
Aug 18 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
anaconda如何查看并管理python环境
Jul 05 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
PyTorch安装与基本使用详解
Aug 31 Python
python编写实现抽奖器
Sep 10 Python
python入门教程之基本算术运算符
Nov 13 Python
python3中apply函数和lambda函数的使用详解
Feb 28 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开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
js计算精度问题小结
2013/04/22 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
深入理解python try异常处理机制
2016/06/01 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
python中几种自动微分库解析
2019/08/29 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
巴西网上药房:onofre
2016/11/21 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
2014年度安全工作总结
2014/12/04 职场文书
车间主任岗位职责
2015/02/03 职场文书
琅琊山导游词
2015/02/05 职场文书
交通事故代理词范文
2015/05/23 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
Python 统计序列中元素的出现频度
2022/04/26 Python