TCP协议和UDP协议都属于端口协议,属于传输层

TCP协议 : 可靠的,面向连接,流式协议,安全,效率低     转账,文件传输....

UDP协议 : 快速,效率高,不可靠              微信,qq等聊天软件.....

TCP协议建立连接三次握手,断开连接四次挥手

三次握手:

客户端        --------------发送syn = 1 seq = 233432(随机序列号)请求建立链接----------->                       服务端
客户端      <----------发送 ack = 1 + 233432回应,且同时发送 syn = 1 seq = 68578请求建立链接---      服务端
客户端       ------------------发送ack = 1 + 68578回应,建立链接------------------------>                                服务端

总共建立两个通道

syn洪水攻击:一个服务器接收的客户端请求非常多

TCP协议又称好人协议,有一些黑客,造大量的假ip,发送请求,首先真的ip进不去,然后服务端处理大量的假ip,服务端会定时发送请求,与假ip建立链接,服务端容易崩

四次挥手:

客户端            ---发送fin = 1 seq = 34562 请求断开链接---------->               服务端
客户端            <----------回应ack = 1 + 34562 断开链接---------                    服务端
客户端           <----------发送fin = 1 seq = 67929请求断开链接----                服务端
客户端            -------- 回应ack = 1 + 67929 断开链接----------->                    服务端

注释:客户端给服务端发送完所有数据后,就会马上发送fin请求,关闭客户端到服务端的通道,但是此时服务端到客户端的数据还没有发送完毕,所有需要等到服务端将所有返回给客户端之后,服务端再发送fin数据,关闭另一个通道

套接字socket

python中的socket是一个模块,与网络通信相关的模块            在应用层和传输层中间 是socket抽象层

基于socket进行简单通信

# 服务端:
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# socket.AF_INET   基于网络的socket       socket.SOCK_STREAM:基于TCP协议的socket
phone.bind(('192.168.16.197',8848))
# 绑定ip地址和端口     '127.0.0.1'是本地回环地址,只允许本计算机访问,当服务端和客户端都在一个计算机上时,可以使用这个ip
# 端口号范围在8000--65535
phone.listen(5)       #监听
# 服务端可以接收N个链接,但是只能同一时刻回应5个请求
conn,addr = phone.accept()    # 等待电话   阻塞等待
# conn = 管道
# addr = 地址
from_client_date = conn.recv(1024)     # 每次最多接收1024个字节
print(from_client_date)
conn.send(from_client_date.upper())
conn.close()
phone.close()# 客户端:
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)   # 括号内参数可以不写,默认
phone.connect(('192.168.16.69',8888))
msg = input('>>>')
phone.send(msg.encode('utf-8'))   #发送字节
from_server_date = phone.recv(1024)
print(from_server_date)
phone.close()

基于socket的通信循环

# 服务端:
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('192.168.16.197',8848))
phone.listen(5)
conn,addr = phone.accept()
while 1:from_client_date = conn.recv(1024)   print(from_client_date)conn.send(from_client_date.upper())
conn.close()
phone.close()# 客户端:
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('192.168.16.69',8888))
while 1:msg = input('>>>')phone.send(msg.encode('utf-8'))   from_server_date = phone.recv(1024)print(from_server_date)
phone.close()

基于socket的连接循环

# 服务端:
import socket
server = socket.socket()
server.bind(('127.0.0.1',9045))
server.listen(5)
while 1:conn,addr = server.accept()while 1:try:from_client_date = conn.recv(1024)print(from_client_date.decode('utf-8'))content = input('>>>')conn.send(content.encode('utf-8'))except Exception:breakconn.close()
server.close()# 客户端:
import socket
client = socket.socket()
client.connect(('192.168.16.69',8888))
while 1:msg = input('>>>')if msg.upper() == 'Q':breakclient.send(msg.encode('utf-8'))from_server_date = client.recv(1024)print(from_server_date.decode('utf-8'))
client.close()

转载于:https://www.cnblogs.com/sandy-123/p/10408513.html

TCP协议-socket通信相关推荐

  1. python中基于tcp协议的通信(数据传输)

    tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据 ...

  2. 从入门到入土:基于Python采用TCP协议实现通信功能的程序

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  3. 从入门到入土:基于C语言采用TCP协议实现通信功能的程序(仅有代码)

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  4. 多路双向串口转网口上位机C++源代码带主动连接支持UDP和TCP客户端Socket通信C语言

    多路双向串口转网口上位机C++源代码带主动连接支持UDP和TCP客户端Socket通信C语言 使用说明介绍 1.功能介绍: 完成了多路网口和串口数据转换的功能. 可实现串口接收到的数据,通过网口发送出 ...

  5. 树莓派TCP传输协议(socket通信) 一发一收与多发多收

    项目场景: 一个物联网系统中,硬件与Web后端的通信肯定是必不可少的.笔者在每个项目中都会自己模拟发送端与接收端来实现树莓派收到的各模块数据能通过TCP协议上传给电脑.笔者在这里提供自己一直都有在用的 ...

  6. TCP及socket通信原理详解

    TCP/IP原型 DARPA一个项目,逐渐演变而来的. 端口号 0~1023:管理员才有权限使用,永久地分配给某应用使用: 注册端口: 1024~41951:只有一部分被注册,分配原则上非特别严格: ...

  7. 通过TCP协议实现通信

    文章目录 前言 一.TCP通信流程 二.客户端代码 1.引入头文件 2.创建套接字 3.绑定套接字 4.请求服务器连接 5.开始通信 三.服务器代码 总结 前言 进⾏⽹络通信的计算机,通信双为了能够通 ...

  8. java socket 通信协议_java网络通信(基于TCP协议可靠通信的socket编程)

    package cn.wang; import java.io.*; import java.net.*; public class Server { static int num = 1;//客户端 ...

  9. 电子词典(基于TCP协议多进程通信和数据库)

    项目:电子词典 项目要求: 登录注册功能,不能重复登录,重复注册.用户信息也存储在数据库中. 单词查询功能 历史记录功能,存储单词,意思,以及查询时间,存储在数据库 基于TCP,支持多客户端连接 采用 ...

  10. 基于TCP协议实现通信

    实现一个简单的从客户端发送一个消息到服务端的功能 public static void main(String[] args) throws IOException { ServerSocket se ...

最新文章

  1. Zookeeper配置文件中的配置项解释和Zookeeper的安装
  2. winPcap_2_编译环境*注意*
  3. 视频直播中 | 5G到底有多快?现场测速,带你走进5G生活
  4. 前端学习(3243):react的生命周期新
  5. 【零基础学Java】—递归(五十一)
  6. 整合xfire与struts2 (一)
  7. C语言编译过程总结简版
  8. 用python实现爬取百度贴吧的小项目
  9. python3.7的idle打不开解决办法_python3.4idle为什么打不开
  10. 全面、详细的SQL学习指南(MySQL方向)
  11. 数据库的学习笔记(一)
  12. robotframework中文乱码---robotframework日志输出时出现中文以unicode编码方式
  13. Matplotlib的imshow()坐标刻度调整及热图对比的注意事项
  14. java wgs84转西安80_如何将西安80坐标转换为国家2000(或WGS84)坐标系?
  15. 常规保养配件信息查询api接口
  16. 幼儿园一个学期下来费用就要1万8了
  17. 什么是Knative?
  18. c++版MC(我的世界)
  19. 2021年煤气考试题库及煤气理论考试
  20. CodeIgniter框架之数据库操作

热门文章

  1. Java泛型通配符T,E,K,V
  2. thymeleaf使用总结
  3. heartbeat+drbd+mysql高可用架构
  4. 31、Arrays数组排序(续)——自定义排序
  5. ubuntu 上安装Nginx1.9.*
  6. 安装phpmyadmin
  7. Oracle数据库多语言文字存储解决方案
  8. VPC中安装Windows Server 2008
  9. PHOTOSHOP教程
  10. CodeRush For .Net 使用-------使用标签