java网络编程说明

  java网络编程指的是基于网络传输层的Socket编程。

网络通信的本质是两台独立自主的主机(一台计算机在网络中并不依赖于另一台计算机)。
Ip地址指的是一台主机在网络中的逻辑地址,它可以定位一台主机。IP地址标识主机位置。

网络通信严格地说并不是主机间通信,而是进程间通信。如A主机里有pa1进程、pa2进程、pa3进行,B主机里有pb1进程、pb2进程、pb3进程。进程和端口号之间是绑定的关系,主机里有0~65535个端口号,一个进程只能绑定一个端口。绑定结束之后,这个进程就监听该端口号。IP地址好比电话号码,端口号就是分机号。
协议:为了通信的顺利进行要事先制定一些约定和标准,这就叫协议。
在网络编程中,有一个OSI七层模型,自下而上,会把网络分成七层:物理层-数据链路层-网络层-传输层-会话层-表示层-应用层。每一次为了完成自己的事情,各自会制定一些协议。网络层负责网络的寻址和路由,在网络层有一个IP协议。我们熟悉的一些协议都是应用层的协议。DNS域名解析协议。POP3是邮局协议。今后做网络编程主要指的是应用层的web编程,主要基于HTTP协议。

传输层解决的问题是把数据安全有效地传输到目标主机上。传输层的协议:
1.  TCP:传输控制协议,特点:有连接,安全可靠,同时以牺牲效率为代价,上一个数据不确认,不会由下一个数据。TCP是最常见的传输层协议。TCP可以保证数据不会丢失和乱序。TCP好比是打电话。
2.  UDP:用户数据报协议,无连接,不可靠。把数据分散成若干个数据包,依次把它们发送出去,但没有和目标建立连接,这些数据的路由可能不一样,这样有可能会造成数据的丢失和乱序。UDP更像是写信,我不能过问这封信是通过什么路径到收信人手里。


TCP协议:
Socket:套接字,一种软件编程模型。一个IP地址加上一个port(端口),可以唯一指定一个Socket。ip如果是电话号码,port是分机号,Socket就是电话机。提出Socket概念是为了简化网络通信。如果Socket是一个电话机,输出流就是话筒,输入流就是听筒。

网络编程需要java.net包。
服务器:
ServerSocket ss=new ServerSocket(9000); 这句话运行后,我的服务器进程会绑定9000端口号,有可能这个端口号已经被别的进程绑定,就会绑定失败。
ss.accept();这是一个阻塞方法,主线程到这就会停下来等待客户端连接过来,这句话实际是一个监听的过程,如果没有人连接,服务器将一直阻塞。如果有客户端来连接,Socket s=ss.accept()就会返回一个Socket对象。
客户端:
要想与服务器连接要创建一个Socket对象,要有两个参数:IP地址和端口号,IP地址是一个字符串类型,可以写IP地址,也可以写主机名。
不要关流,要关就关Socket。你负责申请的资源,你要释放。Socket自带的流,不是我们创建的,要关就关Socket。
想让一个进程同时干很多件事,当然要用 多线程。
TCP编程用到两个类ServerSocket(服务器)和Socket(服务器和客户端)。多客户端的服务器要用到多线程。

UDP协议:
UDP就像是写信,写信需要纸、信封、邮筒三个对象,在UDP编程里纸对应String最终转为字节数组,信封对应的对象是DatagramPacket,邮筒对应DatagramSocket。
DatagramSocket有两个方法:send、receive。
在UDP里的地址也要用一个对象表示:InetAddress。
UDP协议里,客户端先得给服务器发一封信,服务器才能给客户端发送数据,因为UDP协议里是无连接的。

TCP的客户端是不能连接到UDP相同IP和端口的服务器的。

URL:统一资源定位器。URL就是一个字符串,这个字符串可以定义网络上的一个资源。我们常见的URL:http://www.sohu.com/index.html。http是协议名, www.sohu.com是主机名,主机名省略了默认端口:80,index.html是一个文件。URL不要求编码。

你可能感兴趣的:(java,编程,socket,网络协议,网络应用)