异常,网络编程

异常 网络编程

异常:

异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止)

异常分两种:逻辑错误,语法错误

没运行时,语法错误会被python解释器检测到,

程序运行时,会报逻辑错误

常用语法:

try except

网络编程:

C/S架构,client 客户端 server服务器

实现服务端软件与客户端软件基于网络通信

B/S架构,browser 浏览器,server

实现网络编程的两大条件:

1.物理介质:光纤,光缆,网线,无线电波

2.互联网协议

互联网协议:osi七层,osi五层,osi四层

osi七层:

应用层,表示层,会话层、

传输层

网络层

数据链路层

物理层

osi五层:

应用层,传输层,网络层,数据链路层,物理层

osi四层:

应用层,传输层,网络层,网络接口层

物理层:发送电信号(本质发送二进制,0,1)

数据链路层:

单纯的发二进制没有任何意义,必须规定电信号多少位一组,每组什么意思

数据链路层功能:定义了电信号的分组方式,根据以太网协议(ethernet)

ethernet规定:

①一组电信号组成一个数据报,称为“帧”

②每一数据帧分成:报头head和数据data两部分

head包含18字节:源地址6个字节,目标地址6个字节,数据类型6个字节

data包含至少46字节最大1500字节

故帧的长度为64字节到1518字节,超过最大限制就会分片发送

源地址和目标地址为mac地址,以太网规定接入internet的电脑必须有网卡,每块网卡出厂时都会被烧录了一个世界上唯一的mac地址

mac地址是用来确认局域网内一台计算机位置

有了mac地址,以太网采取广播的方式进行通信:即拿到消息后给局域网内的每台计算机都发一份,各计算机拆包时发现mac地址是自己的才会查看信息,但是如果所有的通信都采用广播的方式的话,那么1台机器发送的包全世界都会受到,这将不仅仅是效率低的问题,这会是一场灾难,即广播风暴

网络层:

网络层功能:引入一套新的地址来区分不同的局域网,即网络地址

遵循IP协议:ipv4,ipv6

1.范围0.0.0.0 - 255.255.255.255

2.1个ip地址通常写成四段十进制数,例如172.16.10.1

故ipv4位四段十进制数,ipv6为6段十进制数

在局域网呢,我们可以自己设置ip地址,故可能重复,ip并不能判定两台电脑是否在同一个局域网中

子网掩码:表示子网络特征的一个参数

是用来标识一个ip地址的哪些位是代表网络位,哪些位是主机位,子网掩码不能单独存在,必须结合ip地址使用

子网掩码只有一个作用,就是将某个ip地址分成网络地址和主机地址

子网掩码决定的是一个子网的电脑数目,计算公式是2的n次方,其中,我们可以把n看成是最后一个1后面有多少个0。如255.255.255.0转换成二进制,那就是11111111.11111111.11111111.00000000,后面有8个0,那n就是8,255.255.255.0这个子网掩码可以容纳2的8次方台pc,也就是256台,但有两个ip是不能用的,那就是最后一段不能为0和255,减去这两个,就是254台。

我们再来看一个例子:

255.255.248.0这个子网掩码可以最多容纳多少台电脑?

算法:

  把将其转换为四段二进制数(每段8位,不足8位前面填0补齐)

  11111111.1111111.11111000.00000000

  然后,数数后面有几个0,一共是有11个,那就是2的11次方,等于2048,这个子网掩码最多可以容纳2048-2=2046台电脑。

如何确认多台电脑是否处于1个局域网中:

将ip地址和子网掩码转换为二进制,并进行按位与运算(即同为1变为1),将得到的结果转换为十进制

如果大家的十进制相同,则处于同一局域网中

ip地址分类:A类地址,B类地址,C类地址,D类地址,E类地址

A:1个字节的网络地址和3个字节的主机地址组成(即子网掩码255.0.0.0)

地址范围由1.0.0.0到126.0.0.0 A类网络有126个,每个网络能容纳1亿多主机

B:2个字节的网络地址和2个字节的主机地址组成(即子网掩码255.255.0.0)

地址范围由128.0.0.0到191.255.255.255,B类网络16382个,每个网络可容纳6万多个主机

C:3个字节网络地址和1个字节主机地址组成(即子网掩码255.255.255.0)

地址范围由192.0.0.0到233.255.255.255 c类网络209万,每个网络可容纳254个主机

D:多点广播,Multicast

E:备用地址

回环地址127.0.0.1又称本机地址,将自己电脑设为服务器的时候使用

ARP(地址解析)协议:用于获得目标主机的mac地址

功能:广播的方式发送数据包,获取目标主机的mac地址

前提:每台主机的ip都是已知的,即arp可以通过ip地址解析出目标主机的mac地址

在通信之前,目标主机的ip是一定可以或得的,目标主机的mac是一定拿不到的

拿到目标主机的ip地址后,arp会封一个包

源mac:本机mac

目标mac:12位都为F,FFFFFFFFFFFF

源ip:本机ip

目标ip:可以获得

交换机拿到这个包,一看到12位都是FFFFFFFFFFFF就知道是广播包,

通过子网掩码可以判断出本机ip和目标ip是否处于同一个局域网内,如果处于同一局域网呢,就广播,目标主机拆包时发现是自己的ip就将mac地址返回给源主机,交换机有mac地址学习功能,会记录下此mac地址与对应端口的联系,

如果发现不是同一个子网,就会给该子网的网卡发送,目标网卡拿到包后在它的局域网呢广播,目的主机拆包发现是自己的ip就将mac返回给网卡,网卡返回给源主机的网卡,这样就拿到了mac地址,可以进行通信了

通过网络层的ip协议我们可以定位到目标属于哪一个子网,通过arp协议获得目的主机mac地址,我们就可以找到我们需要通信的主机

传输层:

我们要完成的是应用程序到应用程序的通信,故此时找到了计算机,还需要有协议让我们找到应用程序

TCP/UDP协议

功能:建立端口到端口的通信

端口范围:0-65535 其中0-1024为系统占用端口

uploading-image-375797.png

TCP 安全,效率低,好人协议,谁发请求都会,客户端不回应继续发请求,syn洪水攻击

UDP不可靠传输协议,效率高

#服务端
import socket
soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#买电话
soc.bind(("127.0.0.1",8080))#绑卡
soc.listen(5)#开机,监听
conn,cliend_addr = soc.accpet()#等待电话连接,阻塞操作,三次握手
#收发消息
msg = conn.recv(1024)
conn.send(msg.upper())
conn.close()#挂电话
soc.close()#关机

#客户端
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",8080))#拨电话,地址,三次握手
client.send("hello".encode("utf-8"))#发信息
client.recv(1024)#接收信息,会阻塞
client.close()#关机

原文地址:https://www.cnblogs.com/robert-zhou/p/10156963.html

时间: 2024-11-06 07:28:21

异常,网络编程的相关文章

网络编程的异常及处理

网络编程不只是编写网络.主机.进程都正常时能良好工作的进程,更重要的是客户主机崩溃.客户进程崩溃网络异常时怎么处理. accept被信号中断 accept以及套接字上的I/O可能被信号打断,并返回EINTR作为结果,必须处理该返回值并且适当时候再次调用. for(;;) { if(connfd = accept(listenfd, (struct sockaddr*)addr, sizeof(addr)) < 0) { if(connfd == EINTR) { continue; } else

java网络编程的java.net.SocketException: Connection reset异常

一开始学Stream时没注意过write的flush()方法,今天在学网络编程时,注意到了 服务器端: import java.net.*; import java.io.*; public class Client { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost",8888); BufferedOutputStream out = new

Unix网络编程中的五种I/O模型_转

转自:Unix网络编程中的的五种I/O模型 下面主要是把unp第六章介绍的五种I/O模型. 1. 阻塞I/O模型 例如UDP函数recvfrom的内核到应用层.应用层到内核的调用过程是这样的:首先把描述符.接受数据缓冲地址.大小传递给内核,但是如果此时 该与该套接口相应的缓冲区没有数据,这个时候就recvfrom就会卡(阻塞)在这里,知道数据到来的时候,再把数据拷贝到应用层,也就是传进来的地址空 间,如果没有数据到来,就会使该函数阻塞在那里,这就叫做阻塞I/O模型,如下图: 2. 非阻塞I/O模

第八篇:python基础_8 面向对象与网络编程

本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度. (2)归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合. 2.模拟接口 #!/usr/bin/env pyhon #encoding: utf-8 #auth: yanglei class Interface: #定义接口Interface类来模

JavaSE——UDP协议网络编程(二)

在 UDP 网络编程中,发送方与接收方没有建立联系,没有明显的服务器端和客户端的区别. 类 DatagramSocket: 此类表示用来发送和接收数据报包的套接字. 主要的构造方法: DatagramSocket():创建实例,绑定本机的默认IP地址,随机选择端口.通常用于客户端编程,没有特定监听的端口,仅仅使用一个临时的.  DatagramSocket(int port):创建实例,指定端口号,即固定监听Port端口的报文.  DatagramSocket(int port, InetAdd

java之网络编程

一.网络编程概述 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 有人说,20世纪最伟大的发明不是计算机,而是计算机网络.还有人说,如果你买了计算机而没有联网,就等于买了电话机而没有接电话线一样. 二.网络模型 计算机网络之间以何种规则进行通信,就是网络模型研究问题. 网络模型一般是指OSI开发参

java网络编程serversocket

转载:http://www.blogjava.net/landon/archive/2013/07/24/401911.html Java网络编程精解笔记3:ServerSocket详解ServerSocket用法详解 1.C/S模式中,Server需要创建特定端口的ServerSocket.->其负责接收client连接请求. 2.线程池->包括一个工作队列和若干工作线程->工作线程不断的从工作队列中取出任务并执行.-->java.util.concurrent->线程池

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码