网络编程概述

实现网络互连的不同计算机上运行的程序间可以进行数据交换

网络编程三要素

简单来说就是IP地址,用来识别设备的,端口,用来识别应用程序的,协议,用来遵守"交通规则"的

javaSE 笔记 网络编程_java

IP地址

IPv4:是给每个连接在网络上的主机分配一个32bit地址,要是用二进制表示,就是4个字节,不过一般用10进制来记,比如192.168.1.66

IPv6:采用128位地址长度,16个位一组,8组十六进制数

常用命令:

ipconfig:查看本机IP地址

ping IP地址:检查网络是否连通

特殊IP地址:127.0.0.1:回送地址,可以代表本机地址,一般用来测试使用

InetAddress类

为了方便我们对IP地址的获取和操作,JAVA提供了一个InetAddress类 供我们使用

这个类没有构造方法,同时他里面的各种方法也不全是静态方法,但是他提供一种静态方法来获取该类的对象

主要的方法有:1.staticInetAddress getByName(String host) 确定主机名称的IP地址,主机名称可以使机器名称,也可以是IP地址

2.String getHostName() 获取此IP地址的主机名

3.String getHostAdress() 返回文本显示中的IP地址字符串

端口

端口号:用两个字节表示的整数,它的取值是0-65535,其中,0-1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要

使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。

协议

UDP协议:无连接通信协议,即在数据传输时,数据发送端和接收端不建立链接。适合传输不重要的信息。

javaSE 笔记 网络编程_主机名_02

TCP协议:TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间

可靠无差错的数据传输。适合重要信息的传输

javaSE 笔记 网络编程_ip地址_03

UDP发送数据

java提供了一个类 DatagramSocket 用于发送和接收数据报数据包的套接字,发送对象可以用DatagramPacket创建,构造方式如下

DatagramPacket​(byte[] buf, int offset, int length, InetAddress address, int port)

构造一个数据报包,用于将长度为 length且偏移量为 ioffset的数据包发送到指定主机上的指定端口号。

javaSE 笔记 网络编程_端口号_04

UDP接收数据

javaSE 笔记 网络编程_ip地址_05

TCP发送数据

java使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信,java为客户端提供了Socket类,为服务器端提供了ServerSocket类

javaSE 笔记 网络编程_ip地址_06

因为TCP通讯是需要三次握手的,所以只有发送数据是不行的,还得创建接受数据

TCP接收数据

javaSE 笔记 网络编程_数据_07

TCP例子

javaSE 笔记 网络编程_ip地址_08

有个shutdown的方法可以替代自定义结束标记,没有结束标记的话,服务端会一直在等待客户端传数据。这么看起来不知道while((line=br.readLine())!=null)到底在限制什么。

另外TCP的服务端相比于客户端,多了一个监听的功能,用accept()方法获取,返回的也是一个Socket对象。