一、TCP简介

1. TCP介绍

1)TCP协议,传输控制协议(Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议
 2)tcp通信的三个步骤
    创建连接、数据传输、终止连接

2. TCP特点
 
 1)面向连接
 1. 通信双方必须先建立连接才能进行数据的传输
 2. 双方间的数据传输都可以通过这个连接进行,完成数据交换后,双方断开此连接,以释放系统资源
 3. 连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议

2)可靠传输,通过一套机制来实现可靠传输
 1. 发送应答机制
 2. 超时重传
 3. 错误校验
 4. 流量控制-阻塞管理

3)基于字节流的:以字节流的形式传递给目标主机

3. TCP与UDP的不同点
 - 面向连接
 - 有序数据传输
 - 重发丢失的数据包
 - 舍弃重复的数据包
 - 无差错的数据传输
 - 阻塞/流量控制

4.tcp与upd使用场景:

1) udp:  广播数据时, 用udp   当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP ,比如QQ语音,QQ视频
 2) tcp: tcp比udp更安全,稳定,但是速度没有udp那么快,使用场景非常多;
 例如: http传输,文件传输,要求比较高的数据传输都会用tcp,目前大部分的传输都是基于tcp协议传输

5. UDP与TCP的通信模型 
  
 1) udp通信模型
 udp通信模型中,在通信开始之前,不需要建立相关的连接,只需要发送数据即可,类似于生活中,"写信"",没有严格的客户端和服务端之分
       
 2) tcp通信模型
 tcp通信模型中,在通信开始之前,一定要先建立相关的连接,才能发送数据,类似于生活中,"打电话"",tcp有严格的客户端与服务端之分

二、TCP网络程序-客户端

1. TCP客户端实现流程
 tcp流程步骤:
 1)创建tcp socket客户端对象
 2)与服务端建立连接
 3)收发数据(读写数据)
 4)关闭连接

2.示例代码:

  import socket# 创建sockettcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 目的信息server_ip = input("请输入服务器ip:")server_port = int(input("请输入服务器port:"))# 连接服务器
    tcp_client_socket.connect((server_ip, server_port))# 提示用户输入数据send_data = input("请输入要发送的数据:")tcp_client_socket.send(send_data.encode("utf-8"))# 接收对方发送过来的数据,最大接收1024个字节recv_data = tcp_client_socket.recv(1024)print('接收到的数据为:', recvData.decode('gbk'))# 关闭套接字tcp_client_socket.close()

三、TCP网络程序-服务端

1. TCP服务端创建及实现流程 
 tcp流程步骤:
 1)创建一个server_socket ,用于监听客户端的请求
 2)绑定端口
 3)server_socket开启监听listen,server_socket由主动模拟模式变为被动连接模式
 4)等待接收客户端的连接请求,一有客户端的连接请求,立即接受,并且创建一个与客户端socket对接的socket,新创建的socket用来与客户端的socket进行通信
 5)使用新创建的socket与客户端的socket进行通信(收发数据)
 6)关闭新创建的socket,该socket关闭后, 不再与当前客户端通信,结束与当前客户端的通信
 7)关闭server_socket,该server_socket关闭后,不再接收新的客户端请求

2.示例代码:

  import socket# 创建sockettcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 本地信息address = ('', 8090)    # 元组# 绑定端口,tcp服务端必须绑定端口
    tcp_server_socket.bind(address)# 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的连接请求tcp_server_socket.listen(5) # backlog=5 表示积压的客户端连接请求最多5个, 超过5个,则拒绝连接# 如果有新的客户端来连接服务器,那么就产生一个新的套接字专门为这个客户端服务# client_socket用来为这个客户端服务# tcp_server_socket就可以省下来专门等待其他新客户端的连接client_socket, client_addr = tcp_server_socket.accept()# 接收对方发送过来的数据recv_data = client_socket.recv(1024)  # 最多接收1024个字节print('接收到的数据为:', recv_data.decode('gbk'))# 发送一些数据到客户端client_socket.send("thank you !".encode('gbk'))# 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接client_socket.close()

转载于:https://www.cnblogs.com/longguoliang/p/9404078.html

tcp总结与简单实现相关推荐

  1. Qt TCP协议 传输简单字符串实例

    TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序. A 转载:http://mobile.51cto.com ...

  2. Java TCP 抓包简单示例

    Java TCP 抓包简单示例 由于目前网上没有一篇能真正方便读者操作的此类文章,本文对此通过示例做个简单介绍. 缘起 有一天本来在看头条,然后看到一则游戏的广告,看画面可能是我喜欢的建造类型(纪元1 ...

  3. python写一个文件下载器_python使用tcp实现一个简单的下载器

    上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识. 文件下载器的流程如下: 客户端: 输入目标服务器的ip和port 输入要下载文件的名称 从服务器下载文件保存到本地 ...

  4. TCP/IP 协议简单分析(建立连接握手过程)

    原文:http://hi.baidu.com/wuguoyana/blog/item/38c04d3bcf047ce43a87ce55.html 首先TCP和IP是两种不同的协议,它们来七层网络模型中 ...

  5. Qt中Tcp通信的简单使用二

    tcp编程中写的一个简单的单项传输数据的小例子,和上一节一样,分为客户端和服务端程序,下面看一下界面的效果. 创建的方法和之前一样,上面上代码: 客户端 Client.h #ifndef CLIENT ...

  6. 使用网络TCP搭建一个简单文件下载器

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...

  7. 【STM32+cubemx】0020 HAL库开发:以太网ENC28J60芯片和TCP、UDP简单应用

    MCU通过以太网通信有很多种方式,有的内部自带以太网接口(如stm32f107的某些型号):如果没有,也可以在外围连接以太网芯片来实现.外接的以太网芯片,又分为带网络协议栈和不带协议栈的,带网络协议栈 ...

  8. 【Unity】Socket网络通信(TCP) - 实现简单的多人聊天功能

    多客户端连接服务器其原理是在服务端保存客户端连入后与客户端通信的socket,由于等待客户端连接会阻塞主线程,所以结合多线程就能实现多客户端连入功能.多人聊天只需要将A客户端发来的消息,转发给除A客户 ...

  9. (转)winform下TCP通信的简单应用

    本文转载自:http://blog.csdn.net/wanlong360599336/article/details/7557064 先看效果图: TCP比较繁琐的就是三次握手定理,每次再发送数据前 ...

  10. TCP/IP 协议简单分析

    首先TCP和IP是两种不同的协议,它们来七层网络模型中分别在不同的层次,IP协议是网络层的协议,TCP是更高一层的传输层的协议,TCP是建立在IP协议之上的,所以一般把TCP和IP连在一起说TCP/I ...

最新文章

  1. 客户端与服务器的数据交互
  2. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )
  3. VC的若干实用小技巧
  4. 2015蓝桥杯省赛---java---C---6(奇妙的数字)
  5. C/C++初学者快速提升?
  6. FCPX插件Day of the Dead Titles - 恐怖风格文本动画模板
  7. iOS中控制器的实践和学习(3)-简易5图之A2
  8. 【TeachNLP】文本数据处理-词表获取
  9. 51单片机学习笔记8 -- OLED显示(SPI)
  10. 射频微波芯片设计6:射频电路中的噪声概论
  11. vscode插件查找并导出到新电脑
  12. js中outerHTML的问题
  13. 计算机科学与技术专业大学排名及录取分数,计算机科学与技术专业分数线各大学排名(湖南)...
  14. cpu和内存占用过高,但是任务管理器中的进程占用的内存和cpu看不出来
  15. 操作Excel工具类:ExcelUtils.java
  16. 实战:战狼2票房数据分析——(3)数据读取及分析
  17. 计算机原理理解编程语言_计算机如何理解我们对编程语言及其工作原理的高级概述...
  18. MySql两台服务器(主机)间热备份(双机热备份)
  19. Errorcode? Thread1: EXC_BAD_ACCESS (code=EXCi386_GPFLT)
  20. 51单片机智能小车——寻迹

热门文章

  1. 【命令小结】“|”的用法
  2. 集成服务入门(实验7)数据流的目标
  3. eclipse 安装svn插件(Subclipse)
  4. Win7下使用VFW库连接摄像头
  5. 综述:全国软考首遭试卷丢失 20万考生措手不及
  6. 洛谷P1364 医院设置
  7. 【Git】GitHub for Windows使用(1)
  8. IntelliJ IDEA 安装本地插件
  9. 读取properties文件方式
  10. 菜鸟的IT道路ing (一)