网络编程 socket模块 tcp协议 udp协议
网络基础相关知识 , socket模块 , tcp协议通信代码 , tcp和udp编码流程 网络基础相关知识(1) 架构 C / S 架构: client 客户端 和 server 服务器端 优势:能充分发挥pc机的性能 B / S 架构: browser 浏览器 和 server 服务器 隶属于C/S架构 B /S 架构 同意了应用的接口 (2) 通信 同意台电脑上两个py程序通信 : 打开一个文件 两台电脑通信 : 联网 多个电脑通信 : 电脑1发送一个请求帧,其中包含(我的IP和我的mac地址,和我要找的IP地址为xxxxxxx的主机),将此请求发送给交换机,交换机广播这条消息给其他所有主机 ,目标主机接到这条消息后回复给交换机消息(我的IP地址和mac地址,请回复给源主机(实际这里是IP和mac来代替源主机)),交换机以单播的形式返回给源主机 mac 地址 : 是一个物理地址,全球唯一,类似于身份证ip 地址 : 是一个四位点分十进制,它标识了计算机在网络中的位置 交换机的通信方式: 广播 : 吼一嗓子,发送给每台计算机 单播 : 一对一 组播 : 一对多 arp 协议 : 通过目标 ip 地址获取目标 mac 地址的一个协议端口 : 操作系统为本机上每一个运行的程序都随机分配一个端口,其他电脑上的程序可以通过端口获取到这个程序ip 地址 + 端口 能找到唯一某台电脑上的某一个服务程序路由器 : 连接不同网段 , 路由网关 : 类似于一个局域网的出口和入口网段 : 一个局域往内的ip地址范围子网掩码 : 子网掩码 & ip地址 得到网段 osi 五层模型:应用层 : http , https , ftp传输层 : tcp/udp 四层交换机 , 四层路由器网络层 : ip协议 路由器 , 三层交换机数据链路层 : arp协议 交换机 , 网卡 , 网桥物理层 : 传输电信号 集成器 , 网线 , 光纤 socket 模块 import socket socket 又叫做套接字 sk = socket.socket(family = AF_INET,type = SOCK_STREAM) family: 一种 : AF_UNIX 基于文件类型的套接字(早起socket是源自于unix系统而研发的一个功能,主要是为了同一台电脑上,多个程序直接通信) 一种 : AF_INET 基于网络类型的套接字 type : 一种是基于 TCP 协议 SOCK_STREAM 一种是基于 UDP 协议 SOCK_DGRAMtcp 协议 : 可靠的,面向连接的,面向字节流形式的额传输方式udp 协议 : 不可靠的,不面向连接的,面向数据报的传输方式,但是传输速度快
TCP编码流程: type=SOCK_STREAM(tcp协议不用传类型,默认tcp协议)服务器端: 客户端: 导入模块 import socket 导入模块 实例化对象 sk=socket.socket() 套接字 实例化对象 绑定 ip+port(端口) bind(元组) 监听 listen() 等待连接 accept() 连接服务器 connect/connect_ex(不抛异常,返回错误码) 收发 recv/send 收发 关闭 close 关闭 UDP编码流程: type=SOCK_DGRAM服务器端: 客户端: 导入模块 import socket 导入模块 实例化对象 sk=socket.socket() 实例化对象 绑定 ip+port(端口) bind 收发 recvfrom/sendto 收发 关闭 close 关闭
tcp和udp的区别tcp 面向连接,可靠,面向字节流形式,粘包,只允许一个服务器在同一时间和一个客户端保持通信udp 不面向连接,不可靠,面向数据报形式,传输速度快,不粘包.允许一个服务器在同一时间和多个客户端保持连接
例(同一台电脑上,服务器与客户端相互通信)代码:同一台电脑两个py文件通信(下面两个py文件配合使用)服务器需要一个py文件
# 服务器(代码): import socket sk=socket.socket() #不传参数,默认使用基于网络类型的套接字,协议:TCP sk.bind(('192.168.12.30',18907)) #端口的范围是0-65535 但是 0-1023 这些别用 sk.listen() #同时能接受的连接 while 1:conn,addr=sk.accept() #等待接受客户端的连接 , 阻塞等待while 1:print('输入q退出聊天')ms_r=conn.recv(10033333).decode('utf-8') #接收 , 接收客户端传来的内容conn.recv(能接收的最大长度).decode('utf-8')接收过来解码成utf-8格式print(ms_r)if ms_r.upper()=='Q':breaki=input('>>>')conn.send(i.encode('utf-8')) #发送 , conn.send()发送 i.encode('utf-8')将要传输的内容编码成bytes类型进行传输if i.upper()=='Q':breakconn.close() sk.close()
客户端也需要一个py文件
客户端(代码):
# 客户端(代码): import socket sk=socket.socket() sk.connect(('192.168.12.30',18907)) #连接到服务器 while 1:print('输入q退出')count=input('请输入内容') #输入要发送的内容sk.send(count.encode('utf-8')) #发送if count.upper() == 'Q':breakma=sk.recv(10033333).decode('utf-8') #接收 , 接收服务器传输的内容sk.recv(能接收到额最大长度) , decode('utf-8')解码if ma.upper()=='Q':breakprint(ma) sk.close()
转载于:https://www.cnblogs.com/hdy19951010/p/9468930.html
网络编程 socket模块 tcp协议 udp协议相关推荐
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a 连接 ...
- java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)
文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...
- 27.Linux网络编程socket变成 tcp 高并发 线程池 udp
好,咱们开始上课了,从今天开始咱们连续讲 8 天的,网络编程这个还是在linux环境下去讲,咱们先看一下咱们这 8 天都讲什么东西,跟大家一块来梳理一下,你先有个大概的印象,这些你也不要记,那么网络编 ...
- 基于socket网络编程技术实现TCP和UDP的流程详解及实例
具体函数讲解太多,根据程序自行分析. 可以参考这篇文章: https://blog.csdn.net/qq_41687938/article/details/119102328?spm=1001.20 ...
- udp协议没有粘包问题、基于socketserver实现并发的socket(基于tcp、udp协议)、基于udp协议的套接字、操作系统原理以及进程知识
基于udp协议的套接字通信服务端 from socket import *server=socket(AF_INET,SOCK_DGRAM) #数据报协议->udp server.bind((' ...
- 【Socket网络编程】4.tcp和udp的客户端和服务端收发流程
tcp和udp的客户端和服务端收发流程 1.udp服务器流程: 1.创建serverSocket 2.设置服务器地址 serverAddr 3.将serverSocket和serverAddr绑定 b ...
- python 网络编程--socket模块/struct模块
socket模块: 客户端:CS架构, client -> server 浏览器:BS架构, browser -> server 网络通信本质:传输字节 doc命令查看ip地址:ipc ...
- tcp udp区别优缺点_Linux网络编程面试题--tcp和udp的区别
(1)TCP是基于连接的,UDP是基于无连接的. (2)TCP的数据是可靠的,UDP的数据是不可靠的. (3)TCP的数据是有序的,UDP的数据是无序的. (4)TCP不保存用户边界,UDP保存用户边 ...
- JavavEE中网络编程Socket套接字Ⅰ(UDP)
文章目录 Socket套接字 TCP和UDP的区别 UDP socket DatagramSocket DatagramPacket
最新文章
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的/g是什么意思?”...
- day1-数据库基础
- SQL Server 跨数据库事务
- 【mysql】linux安装mysql
- 查看网关物理地址命令
- 如何找到 SAP Spartacus OCC cms page 发送请求时读取 API endpoint 的代码
- linux --- 高级指令
- 前端学习(1569):todoMVC准备工作
- oracle向右削减和补全,b操纵序列削减Oracle数据库开辟工作量-开辟技术/b[Oracle防范]...
- java设计模式中的动态代理
- “坦克大战”小游戏(C语言)源代码及其详解注释
- 编码:隐匿在计算机软硬件背后的语言(1)--编码到二进制数字系统
- 老毛桃u盘装系统linux,分享老毛桃u盘装系统教程
- 一百块组装可玩LOL的电脑
- SIM800C音频设计指南
- 操作系统知识点(考试版)
- Linux服务器上设置全局代理访问外网并验证
- 绕过content-type检测文件类型上传webshell
- Python_基础知识02
- Spring框架设计模式分析