网络编程---tcp/udp协议
协议使用场景: udp协议(User Datagram Protocol) 即时通讯类的软件 :qq 微信 飞信 歪歪 tcp协议(Transmission Control Protocol) 发邮件\文件的时候
TCP协议: 面向连接\可靠\慢\对传递的数据的长短没有要求 两台机器之间要想传递信息必须先建立连接 之后在有了连接的基础上,进行信息的传递 可靠 : 数据不会丢失 不会重复被接收 慢 : 每一次发送的数据还要等待结果
import socketsk = socket.socket() sk.bind(('127.0.0.1',9001)) sk.listen() while True:conn,addr = sk.accept() while True:msg = input('>>>')conn.send(msg.encode('utf-8'))if msg.upper() == 'Q':breakcontent = conn.recv(1024).decode('utf-8') if content.upper() == 'Q': breakprint(content)conn.close() sk.close()
TCP协议 server端
import socketsk = socket.socket()sk.connect(('127.0.0.1',9001)) while True:ret = sk.recv(1024).decode('utf-8')if ret.upper() == 'Q':breakprint(ret)msg = input('>>>')sk.send(msg.encode('utf-8'))if msg.upper() == 'Q':breaksk.close()
TCP协议 client端
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。
在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。
确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。
UDP协议: 无连接\不可靠\快\不能传输过长的数据 机器之间传递信息不需要建立连接 直接发就行 不可靠 : 数据有可能丢失
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9001))while True:msg,client_addr = sk.recvfrom(1024)print(msg.decode('utf-8'))content = input('>>>')sk.sendto(content.encode('utf-8'),client_addr) sk.close()
UDP协议 server端
import socket sk = socket.socket(type=socket.SOCK_DGRAM) server_addr = ('127.0.0.1',9001)while True:content = input('>>>')if content.upper() == 'Q':breaksk.sendto(content.encode('utf-8'),server_addr)msg = sk.recv(1024).decode('utf-8')if msg.upper() == 'Q':breakprint(msg) sk.close()
UDP协议 client端
转载于:https://www.cnblogs.com/LL97155472/p/10677701.html
网络编程---tcp/udp协议相关推荐
- WinSock API网络编程——TCP/IP协议详解
WinSock API网络编程--TCP/IP协议(http://www.impcas.ac.cn/usr/lujun/browse.asp?id=winsock_tcp) ...
- 网络编程(Tcp/Udp实现聊天、文件上传)
网络编程 1.1 概述 计算机网络是指将位置不同的多台[计算机 通过通信线路连接起来,实现资源共享和信息传递的计算机系统 1.2 网络通信的要素 ip和端口 网络通信协议(tcp/udp) 1.3 I ...
- 编写tcp服务器发送hex格式_Android网络编程-TCP/IP协议
在Android网络编程-计算机网络基础一文中得知,IP协议属于网络层,TCP.UDP协议属于传输层. IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的服务. TCP协议是 ...
- [windows网络编程]tcp/udp编程初步详解-转
#pragma comment (lib,"ws2_32.lib") #include <Winsock2.h> #include <stdio.h> 如你 ...
- 网络编程---TCP/UDP套接字编程原理
本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...
- 大数据 -- java基础16 网络编程 TCP UDP
1.网络编程的三要素:(1)IP地址(2)端口号(3)协议 2.IP地址 : 网络中计算机唯一标识. (1)IP地址在计算机中存储的时候是由二进制的形式进行存储的:IP:192.168.7.42 十进 ...
- 网络编程-tcp/udp
Java网络编程 计算机网络就是通过传输介质.通信设施和网络协议,把分散在不同地点的计算设备互连起来,实现资 源共享和数据传输的系统. TCP/IP协议簇 TCP/IP协议栈是一系列网络协议的总和,是 ...
- 【Java】网络编程——TCP/UDP网络对讲机
目录 前言 OSI概述 传输层 端口 Socket InetAddress类 UDP协议间的通信 UDP协议相关类 UDP 发送端 UDP 接收端 + 发送端 UDP 聊天 + 全局广播 UDP发送大 ...
- 网络编程--TCP/IP协议
参考:https://lijie.blog.csdn.net/article/details/105297532 https://blog.csdn.net/qq_20785973/article/d ...
最新文章
- 最受欢迎 Top 12 Python 开源框架,你都用过吗?
- Commun. Biol. | 人工智能加速抗生素发现
- SQL语句复习【专题八】
- WebGL学习(1) - 三角形
- linux 权限模式,Linux权限模式
- GDIPlus灰度化图像
- 【渝粤题库】广东开放大学 社会学基础 形成性考核
- java初学者:封装 继承 多态的理解
- 计算机软件故障及其处理方法,计算机常见软件故障及其解决方法
- Mac OS系统怎么修改mac地址
- 2018届android校招面试总结:百度,大疆,乐视,知乎
- 关于ABAP中锁参数SCOPE的使用bug一粒
- (DFS)深度优先搜索算法详解
- android系统定制添加分辨率,density设置
- 如何在idea中使用Mysql
- js+css3实现鼠标控制图片旋转实现方向舵效果
- html中关于侧边导航栏和导航栏的编写
- 洛谷 P1862 输油管道问题
- 信号--Signal
- 表格导出计算机,电脑怎么导出excel表格数据-如何将百度指数数据导出到Excel表格...