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单链表的简单实现方法
Sep 23 Python
Python函数返回值实例分析
Jun 08 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
使用Python操作excel文件的实例代码
Oct 15 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
Python实现聊天机器人的示例代码
Jul 09 Python
python 堆和优先队列的使用详解
Mar 05 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
python实现翻转棋游戏(othello)
Jul 29 Python
python exit出错原因整理
Aug 31 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 选项及相关信息函数库
2006/12/04 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
js onload处理html页面加载之后的事件
2013/10/30 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
Python 返回汉字的汉语拼音
2009/02/27 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
pycharm修改file type方式
2019/11/19 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
你常见到的runtime exception
2016/09/05 面试题
党员个人思想汇报
2013/12/28 职场文书
高中化学教学反思
2014/01/13 职场文书
小学毕业感言150字
2014/02/05 职场文书
邀请书格式范文
2015/02/02 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
2015年环卫工作总结
2015/04/28 职场文书
小学数学教学反思范文
2016/02/16 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
对Golang中的FORM相关字段理解
2021/05/02 Golang