网络编程的本质是两个(或多个)设备(如计算机)之间进行数据传输。
通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,就叫做计算机网络;在这个网络中,包括了计算机、路由器、交换机、网线(光纤);路由器和交换机组成了计算机网络的核心,而计算机,只不过是这个巨大网络中的某一个节点。
对于网络编程来说,最重要的是计算机和计算机之间的相互通信,那么首先需要解决的问题是:如何找到你需要找到的某一台计算机?这个问题变引申出了IP的概念。
为了能够识别网络上的每一个计算机,人们给每一个计算机加上一个数字表识,这个就是IP了,现在IPv4、IPv6都有在用。这里用IPv4说明,IPv4由4个0~255的数字组成,例如:99.66.88.255。每个接入网络的计算机都有唯一的地址,这个IP可能是静态的,也有可能是动态的。
但是,由于IP地址不方便记忆,所以人们又发明了域名,例如:baidu.com,一个IP地址可以对应多个域名,但是一个域名只能对应一个IP地址。值得注意的一点是,在传输数据前,都是需要把域名重新解析成IP地址的,实现该功能的,我们把它称作为DNS服务器。
IP和域名可以很好的解决找到计算机的问题,但是,在实际中,我们一台计算机上都会运行多个网络程序,这个时候,便引入了端口。硬件上规定,端口号在0~65535间,每个端口对应一个网络程序(一个网络程序可以占多个端口)。这样,传输数据时,就很容易的找到某一台的某一个程序了。
网络通信都是基于“请求-响应”模式,第一次主动发起通讯的被称作为客户端(client),等待连接的被称作为服务器端(server),建立了连接之后,两者的性质就是完全一样了,这种结构称之为C/S结构,而有一些通用的客户端,如浏览器,使用浏览器做为客户端的这种结构,我们称之为B/S结构。二者个有优劣,此处不详述。
另外一种特殊的P2P(point to point)程序,如电驴、BT等,这种程序中,既包含客户端,又包含服务器端,它可以连接其他的BT种子,也可以向其他的BT种子传输数据。
最后,介绍网络编程中最重要,最复杂的 —— 协议(Protocol),按照前面的介绍,网络编程就是运行在不同计算机中两个程序之间的数据交换。在实际进行数据交换时,为了让接收端理解该数据,计算机比较笨,什么都不懂的,那么就需要规定该数据的格式,这个数据的格式就是协议。
那么如何来编写协议格式呢?答案是随意。只要按照这种协议格式能够生成唯一的编码,按照该编码可以唯一的解析出发送数据的内容即可。也正因为各个网络程序之间协议格式的不同,所以才导致了客户端程序都是专用的结构。
OK,以上是理论基础。
网络通讯方式
1:TCP(传输控制协议)
2:UDP(用户数据报协议)
简单描述一下两者的区别,TCP需要经过连接确认,三次握手,也就是说它是可以保证数据可以传输到对方,而UDP则有点类似于广播,把数据发送出去了,不管有没有接收到。所以,我们在传输重要的数据时,就要选用TCP的方式,而传输量大且非重要的数据时,就可以用UDP方式。甚至可以两者结合使用。
通讯步骤
客户端:1:建立连接;2:交换数据;3:关闭连接
服务端:1:监听端口;2:获得连接;3:交换数据;4:关闭连接
try {
//第一步,建立连接
Socket socket2 = new Socket("baidu.com",80);
//第二步,数据传输,在Java中,数据的传输通过I/O实现。
OutputStream os = socket2.getOutputStream();
//最后,关闭连接
socket2.close();
os.close();
} catch (Exception e) {
}
这就是一个最简单的建立连接、交换数据、关闭连接的过程。