黑马程序员_网络编程的一些总结

来源:互联网 发布:天津买菜用什么软件 编辑:程序博客网 时间:2024/06/05 07:49

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、网络通讯三要素

1、IP地址

P地址可以唯一的标识网络的的计算机,现在常用的IPv4地址是用32个二进制位,即4个字节组成。当我们要在网络上和其他计算机通讯时就需要知道它的IP地址。当然IP地址是存数字,不好记,所以也可以通过域名地址来通讯,其实域名也是要解析成IP地址的。

java中的IP地址类。InetAddress,它是没有构造函数的,是通过某些静态方法返回本类的对象。
如:
static InetAddress getLocalHost();获取本机IP对象
static InetAddress getByName("IP地址");根据IP地址获取IP对象
static InetAddress getAllBuyName("域名地址");根据域名地址获取所有IP对象,通过影视,一个域名地址对应的IP地址可以不是唯一的。

2、端口号

用于标识进程的逻辑地址。不同的进程都有不同的端口标识。
根据IP地址可以和网络上的计算机进行通信,但是计算机上有很多应用程序,发送的信息该由哪个程序接受处理呢,端口号就是标识了计算机上的应用程序。
范围是0~65535,其中0~1024是系统使用或者保留端口

3、传输协议

网络上的计算机加入有各自的传输方法显然是混乱的,需要制定规则,传输协议就是通信的规则,主要有TCP和UDP。
①、UDP
1、不需要建立连接,将数据及源和目的封装成数据包发送;
2、以为面向无连接,是不可靠的协议;
3、不需要建立连接,速度快;
4、每个数据包大小限制在64K以内。
②、TCP
1、面向连接,形成数据传输的通道;
2、连接建立后可进行大数据传输;
3、需要通过三次握手建立连接,是可靠协议;
4、必须建立连接,效率会稍低。
注:三次握手原理

第一次:建立连接时,客户端发送SYN包(SYN=x)到服务器,并进入SYN_SEND状态,等待服务器确认。

第二次:服务器收到SYN包,必须确认客户端的SYN(ACK=x+1),同时自己也发送一个SYN包(SYN=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次:客户端接收到服务器的SYN+ACK包,向服务器发送确认包(ACK=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

三次握手完成之后,客户端和服务器之间开始传送数据。


③、适用情况
UDP适用情况:对数据安全性要求不高,并且需要高效的传输,比如网络视频会议、桌面共享,需要快速接收数据,并丢失少量数据包不影响筒体效果。
TCP适用情况:对数据安全性要求较高,需要确定接受方确定,并建立连接传输大量数据。比如打电话、下载等。

二、Socket套接字

socket就是为网络服务提供一种机制,通信的两端都有socket,网络通信其实就是socket间的通信,数据在两个socket之间通过IO传输。
Socket和ServerSocket类位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。
在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。
不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

Socket中的常用方法:
java.net.Socket类继承与Object,有8个构造方法。其中三个使用最频繁的方法:
void accept():用于获取连接到服务端的客户端对象,并且返回一个客户端的Socket对象实例。该方法是一个阻塞式方法。
"阻塞"使程序运行暂时"停留",直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
 
InputStream getInputStream()方法获得网络连接输入,同时返回一个IutputStream对象实例,。
OutputStream getOutputStream():该方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

    注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。



0 0
原创粉丝点击