网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员
•程序员所做的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴。编程
•在发送和接收数据时,大部分的程序设计语言都设计了专门的API实现这些功能,程序员只须要调用便可。数组
网络概述浏览器
•网络编程就是两个或多个设备(程序)之间的数据交换。服务器
•识别网络上的每一个设备:网络
•IP地址:每一个计算机在联网之后都拥有一个惟一的合法IP地址,就像手机号,在计算机网络中,如今命名IP地址的规定是IPv4协议,该协议规定每一个IP地址由4个0-255之间的数字组成。这个IP地址多是动态的,也多是固定的。编码
•域名(Domain Name)。计算机网络
•一个IP地址能够对应多个域名,一个域名只能对应一个IP地址。线程
•DNS服务器:在网络中传输的数据,所有是以IP地址做为地址标识,因此在实际传输数据之前须要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器,也就是通俗的说法叫作域名解析。 当DNS服务器正常工做时,使用IP地址或域名均可以很方便的找到计算机网络中的某个设备,例如服务器计算机。当DNS不正常工做时,只能经过IP地址访问该设备。设计
•C/S结构:网络编程的结构被称做客户端/服务器结构,也叫作Client/Server结构。
•B/S结构:使用浏览器做为客户端的结构被称做浏览器/服务器结构,也叫作Browser/Server结构。B/S结构其实也就是一种特殊的C/S结构。
•P2P程序:P2P程序中既包含客户端程序,也包含服务器端程序,是一种特殊的程序。
•端口:让一个计算机能够同时运行多个网络程序。端口的号码必须位于0-65535之间,每一个端口惟一的对应一个网络程序,一个网络程序可使用多个端口。
•协议(Protocol):在实际进行数据交换时,为了让接收端理解该数据,须要规定该数据的格式,这个数据的格式就是协议。
•如何来编写协议格式:只要按照这种协议格式可以生成惟一的编码,按照该编码能够惟一的解析出发送数据的内容便可。也正由于各个网络程序之间协议格式的不一样,因此才致使了客户端程序都是专用的结构。
•在现有的网络中,网络通信的方式主要有两种:
•TCP(传输控制协议)方式:进行网络通信时,须要创建专门的虚拟链接,而后进行可靠的数据传输,若是数据发送失败,则客户端会自动重发该数据。
•UDP(用户数据报协议)方式:进行网络通信时,不须要创建专门的虚拟链接,传输也不是很可靠,若是发送失败则客户端没法得到。
•网络编程的通常有两种结构:
•客户端/服务器结构,也叫作Client/Server结构,简称C/S结构。优势是表现力丰富,缺点是通用性差、维护的压力比较大。
•浏览器/服务器结构,也叫作Browser/Server结构,简称为B/S结构。优势是开发的压力比较小,不须要维护客户端。缺点是限制比较大,表现力不强,没法进行系统级操做等。
网络编程技术
•客户端的编程主要由三个步骤实现:
•创建网络链接:在创建网络链接时须要指定链接到的服务器的IP地址和端口号,创建完成之后,会造成一条虚拟的链接,后续的操做就能够经过该链接实现数据交换了。
•交换数据:链接创建之后,就能够经过这个链接交换数据了。交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,若是客户端不发送请求则服务器端就不响应。根据逻辑须要,能够屡次交换数据,可是仍是必须遵循请求响应模型。
•关闭网络链接:在数据交换完成之后,关闭网络链接,释放程序占用的端口、内存等系统资源,结束网络编程。
•服务器端网络编程步骤:
•监听端口:服务器端属于被动等待链接,因此服务器端启动之后,不须要发起链接,而只须要监听本地计算机的某个固定端口便可。这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。
•得到链接:当客户端链接到服务器端时,服务器端就能够得到一个链接,这个链接包含客户端的信息,服务器端和客户端也经过该链接进行数据交换。通常在服务器端编程中,当得到链接时,须要开启专门的线程处理该链接,每一个链接都由独立的线程实现。
•交换数据:服务器端经过得到的链接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,而后进行逻辑处理,再把处理之后的结果数据发送给客户端。这个和客户端的数据交换数序不一样。服务器端得到的链接和客户端链接是同样的,只是数据交换的步骤不一样。固然,服务器端的数据交换也是能够屡次进行的。在数据交换完成之后,关闭和客户端的链接。
•关闭链接:当服务器程序关闭时,须要关闭服务器端,经过关闭服务器端使得服务器监听的端口以及占用的内存能够释放出来,实现了链接的关闭。
•实现服务器端监听的代码为:
ServerSocket ss = new ServerSocket(10000);
•实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:
•DatagramSocket:实现“网络链接”,包括客户端网络链接和服务器端网络链接。DatagramSocket实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络链接,该类既能够用于实现客户端链接,也能够用于实现服务器端链接。
•DatagramPacket:实现对于网络中传输的数据封装,该类的对象表明网络中交换的数据。在UDP方式的网络编程中,不管是须要发送的数据仍是须要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。和TCP方式的网络传输相比,IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。
•InetAddress类:该类的功能是表明一个IP地址,而且将IP地址和域名相关的操做方法包含在该类的内部。
DatagramSocket:实现“网络链接”,包括客户端网络链接和服务器端网络链接。虽然UDP方式的网络通信不须要创建专用的网络链接,可是毕竟仍是须要发送和接收数据,DatagramSocket实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络链接,该类既能够用于实现客户端链接,也能够用于实现服务器端链接。
•DatagramPacket:实现对于网络中传输的数据封装。在UDP方式的网络编程中,不管是须要发送的数据仍是须要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。其实DatagramPacket类的做用相似于现实中的信件,在信件中包含信件发送到的地址以及接收人,还有发送的内容等,邮局只须要按照地址传递便可。在接收数据时,接收到的数据也必须被处理成DatagramPacket类型的对象,在该对象中包含发送方的地址、端口号等信息,也包含数据的内容。和TCP方式的网络传输相比,IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。 String s = “Hello”; String host = “127.0.0.1”; int port = 10001; //将发送的内容转换为byte数组 byte[] b = s.getBytes(); //将服务器IP转换为InetAddress对象 InetAddress server = InetAddress.getByName(host); //构造发送的数据包对象 DatagramPacket sendDp = new DatagramPacket(b,b.length,server,port); //发送数据 ds.send(sendDp); //构造缓冲数组 byte[] data = new byte[1024]; //构造数据包对象 DatagramPacket received = new DatagramPacket(data,data.length); //接收数据 ds.receive(receiveDp); //输出数据内容 byte[] b = receiveDp.getData(); //得到缓冲数组 int len = receiveDp.getLength(); //得到有效数据长度 String s = new String(b,0,len); System.out.println(s);