分享

20-java笔记-网络编程

 印度阿三17 2019-08-11

网络编程

1.网络:

将地理位置不同的具有独立功能的多态计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的资源系统

2.网络模型

网络模型概述
计算机网络之间以何种规则进行通信,就是网络模型研究问题。
网络模型一般是指
OSI(Open System Interconnection开放系统互连)七层参考模型
TCP/IP四层参考模型
主机至网络层(物理层 , 数据链路层) , 网际层 , 传输层 , 应用层(应用层 , 表示层 , 会话层)

网络模型7层概述:
1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0)。 这一层的数据叫做比特。

2.数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。

3.网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。

4.传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。
主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。

5.会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)
6.表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。
7.应用层: 主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)。

3.网络编程三要素:

IP(确定某个计算机)、端口号(确定一个应用,如飞秋)、传输协议(UDP、TCP)

A、IP:

规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址,标示一台计算机的唯一性。

目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位组成。

习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。

互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。比如,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

但是,问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。

那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数"子网掩码"(subnet mask)。

所谓"子网掩码",就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

IP地址 = 网络地址 主机地址
A类IP地址:第一段号码为网络地址,剩下的三段号码为本地计算机的号码

1.0.0.1—127.255.255.254
(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)
(2)127.X.X.X是保留地址,用做循环测试用的。

B类IP地址:前二段号码为网络地址,剩下的二段号码为本地计算机的号码

128.0.0.1—191.255.255.254 172.16.0.0—172.31.255.255是私有地址。

C类IP地址:前三段号码为网络地址,剩下的一段号码为本地计算机的号码

192.0.0.1—223.255.255.254 192.168.x.X是私有地址

D类 224.0.0.1—239.255.255.254
E类 240.0.0.1—247.255.255.254

127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1
DOS命令 ipconfig:查看本机IP地址
xxx.xxx.xxx.255 广播地址

B、协议

UDP:

将数据源和目的封装成数据包中,不需要建立连接;
每个数据报的大小在限制在64k;
因无连接,是不可靠协议;
不需要建立连接,速度快

TCP:

建立连接,形成传输数据的通道;
在连接中进行大数据量传输;
需要连接所以是可靠协议;
必须建立连接,效率会稍低

C、端口

端口号(确定一个应用,如飞秋)

TCP与UDP段结构中端口地址都是16比特,可以有在0—65535范围内的端口号。对于这65536个端口号有以下的使用规定:

(1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何TCP/IP实现所提供的服务都用1—1023之间的端口号,是由ICANN来管理的;

(2)客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;

(3)大多数TCP/IP实现给临时端口号分配1024—5000之间的端口号。大于5000的端口号是为其他服务器预留的

4、Socket

套接字=IP 端口

网络编程也称套接字编程

网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。

Socket原理机制:
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。

5、InetAddress

为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress 供我们使用,此类表示互联网协议 (IP) 地址。InetAddress(Inet4Address、Inet6Address)

static InetAddress getLocalHost() 
返回本地主机的地址。 

String getHostAddress() 
返回文本表示中的IP地址字符串。 

static InetAddress getByAddress(byte[] addr) 
返回给定的原始IP地址 InetAddress对象。 

byte[] getAddress() 
返回该对象的 InetAddress原IP地址。  

InetAddress in = getByName();//根据主机名或IP参数  InetAddress返回对象
String ip = in.getHostAddress();//获取IP
String hn = in.getHostName();//获取主机名

InetAddress lh = InetAddress.getLocalHost();//
String getHostAddress() 
返回文本表示中的IP地址字符串。 

6、UDP协议接收数据

public class lx1  {
    public static void main(String[] args) throws Exception{
        DatagramSocket fuwuduan = new DatagramSocket(6666);

        DatagramPacket kongbao = new DatagramPacket(new byte[1024], 1024);
        fuwuduan.receive(kongbao);
        byte[] shuju = kongbao.getData();
        int len =kongbao.getLength();
        String fasongdizhi = kongbao.getAddress().getHostAddress();

        System.out.println(fasongdizhi "客户端:" new String(shuju,0,len));

        fuwuduan.close();
    }
}



public class lx2 {
    public static void main(String[] args) throws IOException {
        DatagramSocket kehuduan = new DatagramSocket();

        Scanner sc = new Scanner(System.in);
        System.out.println("聊天内容:");
        String talk = sc.nextLine();
        byte[] bytes = talk.getBytes();

        InetAddress lh = Inet4Address.getLocalHost();
        String kehuduanAddress = lh.getHostAddress();
        DatagramPacket shujubao = new DatagramPacket(bytes,bytes.length,lh,6666);
        kehuduan.send(shujubao);

        kehuduan.close();
    }
}

7、TCP协议接收数据

java针对TCP协议提供了两个Socket类
	
	1.客户端 Socket  java.net.Socket包下
	Socket(InetAddress address,int port);//服务器ip,服务端端口
	Socket(String host,int port);//服务端ip字符串,服务端端口
	Socket s = Socket("192.168.11.123",6666);
	
	//发送数据 获取通道中的流
	OutputStream out = s.getOutputStream();
	out.write("服务端,我来了".getBytes());

	s.close();


	2.服务端 ServerSocket
	ServerSocket ss = new ServerSocket(6666);
	Socket sk = ss.accept();//阻塞时方法 阻塞此处 等待客户端连接 连接上以后才会执行下面代码 一旦连接就返回该套接字
	InputStream in = sk.getInputStream();
	byte[] bytes = new byte[1024];
	int len = in.read(bytes);//阻塞方法,未收到发过来的消息是不会往下走 报错 
	String s = new String(bytes);
	System.out.println(s);
	ss.close();


1.自定义结束标记
2:使用shutdownInput,shutdownOutput方法。
//客户端上传文件结束后 直接结束流对象
// public void shutdownOutput()
//sk.shutdownOutput() ;
来源:https://www./content-1-386601.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多