TCP简介

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

Python实现简易TCP程序

TCP server

#!/usr/bin/env python3

# -*- encoding = utf-8 -*-

# 该代码由本人学习时编写,仅供自娱自乐!

# 本人QQ:1945962391

# 欢迎留言讨论,共同学习进步!

import json

import time

from socket import *

def Server_JSON(ip, port):

# 创建TCP Socket, AF_INET为IPv4,SOCK_STREAM为TCP

sockobj = socket(AF_INET, SOCK_STREAM)

# 绑定套接字到地址,地址为(host,port)的元组

sockobj.bind((ip, port))

# 在拒绝连接前,操作系统可以挂起的最大连接数量,一般配置为5

sockobj.listen(5)

print('服务器准备就绪!')

try:

while True: # 一直接受请求,直到ctl+c终止程序

# 接受TCP连接,并且返回(conn,address)的元组,conn为新的套接字对象,可以用来接收和发送数据,address是连接客户端的地址

connection, address = sockobj.accept()

# 打印连接客户端的IP地址

print('Server Connected by', address)

recieved_message = b'' # 预先定义接收信息变量

recieved_message_fragment = connection.recv(1024) # 读取接收到的信息,写入到接收到信息分片

while recieved_message_fragment:

recieved_message = recieved_message + recieved_message_fragment # 把所有接收到信息分片重组装

recieved_message_fragment = connection.recv(1024)

obj = json.loads(recieved_message.decode()) # 把接收到信息json.loads回正常的obj

print(obj) # 打印obj,当然也可以选择写入文件或者数据库

connection.close()

except KeyboardInterrupt:

time.sleep(1)

print('接收到信号,退出程序!')

if __name__ == '__main__':

# 使用Linux解释器 & WIN解释器

Server_IP = '0.0.0.0'

Server_Port = 6666

Server_JSON(Server_IP, Server_Port)

TCP client

#!/usr/bin/env python3

# -*- encoding = utf-8 -*-

# 该代码由本人学习时编写,仅供自娱自乐!

# 本人QQ:1945962391

# 欢迎留言讨论,共同学习进步!

import json

from socket import *

def Client_JSON(ip, port, obj):

# 创建TCP Socket并连接

sockobj = socket(AF_INET, SOCK_STREAM)

sockobj.connect((ip, port))

# 把obj转换为JSON字节字符串

send_message = json.dumps(obj).encode()

# 读取1024字节长度数据, 准备发送数据分片

send_message_fragment = send_message[:1024]

# 剩余部分数据

send_message = send_message[1024:]

while send_message_fragment:

sockobj.send(send_message_fragment) # 发送数据分片(如果分片的话)

send_message_fragment = send_message[:1024] # 读取1024字节长度数据

send_message = send_message[1024:] # 剩余部分数据

sockobj.close()

if __name__ == '__main__':

# 使用Linux解释器 & WIN解释器

dict1 = {'key1': 'welcome', 'key2': [1, 2, 3, 4, 5], 'key3': ([3, 4], 'python'),'key4': 'python'*2048}

dict2 = {'key1': 'welcome', 'key2': [1, 2, 3, 4, 5], 'key3': ([3, 4], 'python'), 'key4': 'python'}

Client_JSON('192.168.98.29', 6666, dict1)

Client_JSON('192.168.98.29', 6666, dict2)

python实现tcp通信_Python实现简易TCP通信程序相关推荐

  1. python模拟发红包_Python编写简易发红包程序

    1.固定人数抢红包 import random money = 100 for i in range(1,10):#限制人数 a = random.randint(1,10)#随机生成1到10元 mo ...

  2. python socket 主动断开_Python网络编程tcp详解(基础篇十四)

    网络编程tcp 1 TCP详解 <1> tcp概述 TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的.可靠的.基于字节流的 ...

  3. python编写木马攻击_Python编写简易木马程序

    Python编写简易木马程序 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 + ...

  4. 用python做一个木马_Python编写简易木马程序

    light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Subli ...

  5. python进程间通信时间开销_python 进程间的通信

    python3,进程间的通信 本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is ...

  6. python tcp协议_python 网络编程 -- Tcp协议

    Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 ...

  7. python动态时钟代码_python实现简易动态时钟

    本文实例为大家分享了python实现简易动态时钟的具体代码,供大家参考,具体内容如下 from turtle import * from datetime import * #移动到指定位置 def ...

  8. python客户端与服务器端_Python实现的FTP通信客户端与服务器端功能示例

    本文实例讲述了Python实现的FTP通信客户端与服务器端功能.分享给大家供大家参考,具体如下: 一 代码 1.服务端代码 import socket import threading import ...

  9. 用python动态时钟代码_python实现简易动态时钟

    本文实例为大家分享了python实现简易动态时钟的具体代码,供大家参考,具体内容如下 from turtle import * from datetime import * #移动到指定位置 def ...

最新文章

  1. SQL中的left join与right join
  2. Eclipse 删除 空行
  3. android mqtt详解_Android mqtt入门 Android studio(转)
  4. 开发者说:当垃圾箱有了智慧
  5. linux循环控制结构,Linux Shell 之 Shell 基本控制结构(二)(循环结构)
  6. nginx学习文档之三 nginx常用命令
  7. js 父子标签同时设置onclick,字标签触发父标签onclick解决办法
  8. 高端存储器研发再获突破 集成电路国产化进程加快
  9. android studio for android learning (二十 )android中this、context等关键概念理解全解
  10. LabVIEW强制重新安装无法运行或损坏的NI软件
  11. 正则表达式的语法及使用
  12. spark学习之sparksql语法优化
  13. android apk旋转,系统的屏幕旋转弱爆了!超强屏幕旋转控制APP
  14. Winodws10 system进程占用磁盘100%
  15. 面试官问:如何搭建测试环境?掌握这5种技能和知识就够了
  16. 理解全加器(进来学小学加法)
  17. Bean Validation——自定义注解
  18. Warning: continue targeting switch is equivalent to break. Did you mean to use continue 2? 故障
  19. TypeScript免费视频图文教程(2W字)
  20. 计算机专业本科生和研究生比较

热门文章

  1. linux shell ls xargs rm 组合删除文件
  2. linux 非交互ssh sshpass简介
  3. postgresql 数据库 客户端认证
  4. linux下使用binfmt_misc设定不同二进制的打开程序
  5. DUILib 中的通知事件
  6. 在Ring3上实现文件碎甲(解锁)功能
  7. c/c++中运行外部程序
  8. Android--AudioManager控制音量
  9. opencv 裁剪 java_如何在opencv java中裁剪检测到的面部图像
  10. 堆密度测定的意义_堆密度的测量