tcp总结与简单实现
一、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 # 创建socket
tcp_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 # 创建socket
tcp_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()
tcp总结与简单实现的更多相关文章
- PHP Swoole-Demo TCP服务端简单实现
tcp 服务端简单demo与client . <?php /** * author : rookiejin <mrjnamei@gmail.com> * createTime : 2 ...
- JAVA基础知识之网络编程——-基于TCP通信的简单聊天室
下面将基于TCP协议用JAVA写一个非常简单的聊天室程序, 聊天室具有以下功能, 在服务器端,可以接受客户端注册(用户名),可以显示注册成功的账户 在客户端,可以注册一个账号,并用这个账号发送信息 发 ...
- TCP/IP协议简单介绍
TCP/IP协议族总共分为四层,分别为: 应用层:应用层协议有Telnet(远程登入协议).FTP(文件传输协议).SMTP(简单邮件传送协议).SNMP(简单网络管理协议).HTT ...
- java 网络编程之TCP通信和简单的文件上传功能
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- python使用tcp实现一个简单的下载器
上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识. 文件下载器的流程如下: 客户端: 输入目标服务器的ip和port 输入要下载文件的名称 从服务器下载文件保存到本地 ...
- 基于Tcp协议的简单Socket通信实例(JAVA)
好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...
- TCP通讯模型简单示例
1. TCP通讯模型 2. 服务器端 ① 创建socket,用函数socket() ② 绑定IP地址.端口号等信息到socket上,用函数bind() ③ 设置允许的最大连接数,用函数listen() ...
- 使用网络TCP搭建一个简单文件下载器
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...
- http协议跟tcp协议的简单理解
在说明这两个协议之前,我们先简单说一下网络的分层. 1)应用层 支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层协议进行通信.主要的协议有:http.ftp.te ...
- python3实现TCP协议的简单服务器和客户端
利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作 ...
随机推荐
- Appium 常用方法
锁定 锁定屏幕 # python driver.lock(5) 将 app 置于后台 把当前应用放到后台去 # python driver.background_app(5) 收起键盘 收起键盘 # ...
- androidcode
package UICtrl; import android.animation.ObjectAnimator;import android.content.Context;import androi ...
- css outline属性
outline属性在一个html element的周围画出一条线来,位于边框的外围,起到突出元素的作用.轮廓线不占据任何布局空间,也不一定非要是矩形. p { outline:#00FF00 dott ...
- tcp-full.cc
ns2--tcp-full.cc /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */ /* * Copy ...
- SQL 查询:查询学生平均成绩
编程萌新,因为遇到这么个SQL 查询的问题:在一张表A里有如下字段:学生姓名.学科名.学科成绩.写一条SQL 语句查出各科平均成绩并按学生姓名分组,按如下格式显示:学生姓名|语文|数学|英语.一开始遇 ...
- Mysql学习---基础操作学习2
基本数据类型 Mysql基本数据类型:二进制,数值[整数,小数].字符串[定长,变长]. 二进制数据.时间和枚举集合 bit[(M)] 二进制位(101001),m表示二进制位的长度(1-64),默认 ...
- 使用Hibernate注解Annotations进行对象映射的异常处理
通过Hibernate注解Annotations进行对象映射,想在Oracle数据库中自动创建表,代码如下: 实体类: import javax.persistence.Basic;import ja ...
- 2019.1.6 2.8 Spring的AOP事务
2.8 Spring的AOP事务 xml配置aop事务 先applicationContext.xml 文件 配置事务管管理器 配置通知 织入目标对象
- PCA算法的最小平方误差解释
PCA算法另外一种理解角度是:最小化点到投影后点的距离平方和. 假设我们有m个样本点,且都位于n维空间 中,而我们要把原n维空间中的样本点投影到k维子空间W中去(k<n),并使得这m个点到投影点 ...
- localStorage和cookie操作
localStorage和cookie操作代码: cookie: { isSupportCookie: function() { return navigator.cookieEnabled; }, ...