python实现tcp通信_Python实现简易TCP通信程序

本文介绍了TCP协议的基础知识,包括其可靠性特点和工作原理。通过Python代码展示了如何实现一个简单的TCP服务器和客户端,包括服务器监听、接受连接、接收与发送数据,以及客户端连接、发送和接收数据的过程。示例中使用了JSON进行数据交换。
摘要由CSDN通过智能技术生成

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值