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协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作 ...
随机推荐
- 微信小程序——初始化一个小程序项目
最近准备学习一下微信小程序,因为之前有react native项目经验,学习起来应该困难不大 微信小程序官网地址:https://mp.weixin.qq.com/debug/wxadoc/dev/i ...
- linux 文件常用操作
linux 文件基本操作 新建文件:touch test 不会替换重名文件,并且linux一切都是文件,文件夹和文件不能重名 新建文件夹:mkdir test使用 -p 参数,同时创建父目录(如果不存 ...
- Java中short、int、long、float、double的取值范围
一.基本数据类型的特点,位数,最大值和最小值.1.基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 (-2的15此方 ...
- Spring-aop实现切面的四种方式 (2)
AOP实现方式一 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...
- jQuery解决高度统一问题
<div class="itemdl over"> <dl class="fl"> <dt><img src=&quo ...
- shell----删除文件中的^M
在Linux下使用vi来查看一些在Windows下创建的文本文件,有时会发现在行尾有一些“^M”.有几种方法可以处理. 1.使用vi的替换功能.启动vi,进入命令模式,输入以下命令: :%s/^M$/ ...
- 使用burpsuite对移动app抓包分析
测试移动APP的联网请求,需要获取路径或者参数的时候,使用该工具burpsuite非常方便! 要求: 移动终端和PC处于同一个wlan环境下 第一步:获取本地地址,cmd-->ipconfig ...
- D3——绘制SVG图形-直方图
1.创建SVG元素 var svg = d3.select("body").append("svg"); 2.为SVG元素设置属性 svg.attr() .at ...
- React Native for Android on Windows 配置开发安装总结
配置开发安装总结(由于当前react-native更新较快,目前是针对2015年11月底时的reacti-native android for windows版本,有些内容可能过时) 官方的安装指导在 ...
- HDOJ 1528 Card Game Cheater
版权声明:来自: 码代码的猿猿的AC之路 http://blog.csdn.net/ck_boss https://blog.csdn.net/u012797220/article/details/3 ...