知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

Java学习笔记(十五):网络编程基础知识

发表时间:2022-03-25来源:网络

网络编程的实质就是编写程序直接或间接地通过网络协议与其它计算机上的某个程序进行通讯。那么,程序员在网络编程中需要关注的问题包括两个:一是如何找到网络上的主机上的要进行通讯的程序,二是找到了主机上的程序后如何传输数据。

一、网络体系结构

为了促进计算机网络的发展,国际标准化组织ISO在现有网络的基础上,提出了不基于具体机型、操作系统或公司的网络体系结构,称为开放系统互连参考模型,即OSI/RM。但是ISO制定的OSI参考模型过于庞大、复杂招致了许多批评。因此美国国防部提出了TCP/IP协议栈参考模型,简化了OSI参考模型,获得了广泛的应用。

二、网络编程基础知识

如何找到网络上的主机上的要进行通讯的程序?

1、IP协议

IP协议是一个分组交换协议,不保证可靠传输,一个数据包通过IP协议传输会自动分成若干小的数据包然后通过网络进行传输。
一个程序要与另一个程序通信,就要给网络提供足够的信息,使其能够找到另一个程序。
在TCP/IP协议中,网络互联层主要负责网络主机的寻址定位。由IP地址就可以唯一确定网络上的一台计算机。因此,我们在程序中只要提供了要通讯的主机的IP地址,就可以找到该主机。
除了在程序中提供要寻找的主机的IP地址外,我们还可以提供要寻找的主机的域名,然后互联网上的DNS(域名系统)服务器会自动将该域名转化为IP地址。

2、端口(Port)

IP地址用来标识一台计算机,但是一台计算机上可能提供多种网络应用程序,如何来区分这些不同的程序呢?这就要用到端口。
这样,我们只要提供了IP地址和端口号,就可以找到网络上指定主机上要进行通讯的指定程序。
IP地址就相当于于街道地址或公司的总机电话号码,端口号就相当于房间号或分机号码。
端口号是一组16位的无符号二进制数,每个端口号的范围是1到65535

数据传输由TCP/IP分层模型中的传输层负责,该层包含TCP和UDP两种协议。

3、TCP协议

TCP(Transmission Control Protocol)协议是一个传输控制协议,建立再IP协议之上,IP协议负责传输数据包,TCP协议负责控制传输数据包;
TCP协议传输之前需要先建立连接,然后才能传输数据,传输完成后断开连接;
TCP协议是一个可靠传输协议,他通过接收确认,超时重传实现;
TCP协议支持双向通信,双方可以同时传输和接收数据。

4、UDP协议

UDP(User Datagram Protocol)协议是数据报文协议,不面向连接,不保证可靠传输,由于UDP协议传输效率高,通常用来传输视频等能容忍丢失部分数据的文件。

5、TCP协议和UDP协议

TCP是可靠的连接,TCP就像打电话,需要先打通对方电话,等待对方有回应后才会跟对方继续说话,也就是一定要确认可以发信息以后才会把信息发出去。TCP上传任何东西都是可靠的,只要两台机器上建立起了连接,在本机上发送的数据就一定能传到对方的机器上。

UDP就好比发电报,发出去就完事了,对方有没有接收到它都不管,所以UDP是不可靠的。

TCP传送数据虽然可靠,但传送得比较慢;UDP传送数据不可靠,但是传送得快。

这种不可靠性对于我们编写的程序来说是不可接受的,那就应该使用TCP协议。但是,如果我们开发的网络程序对通讯可靠性没有要求,UDP可能就是一个更好的选择。

6、Socket编程

Socket的英文意思是“插座”。用于应用程序之间建立远程连接。
Socket内部通过TCP/IP协议进行数据传输,可以简单的理解为对IP地址和端口号的描述。

Socket编程需要实现服务器端和客户端,因为这两个设备通讯时,需要知道对方的IP和端口号。
TCP的Server的插座就叫ServerSocket,Client的插座就叫Socket

使用Socket在两台计算机之间建立TCP连接的步骤:

ServerSocket server = new ServerSocket(port); /服务器初始化一个ServerSocket对象,指示通讯将要发生在哪个端口号上。 Socket socket = server.accept(); /通过accept方法得到一个Socket对象与远程客户端建立连接,该方法会一直等待,直到一个客户端连接到服务器上的指定端口。

在服务器等待的同时,客户端实例化一个Socket对象,指定要连接的服务器名和端口号。

Socket socket = new Socket(ip, port); /指定要连接的服务器名和端口号

如果通讯建立了,客户端现在就有一个能够与服务器进行通讯的Socket对象。
在服务器端,accept()方法返回一个将要连接到客户端Socket服务器
通讯可以通过使用I/O流发生。每个Socket都有一个DataOutputStream和一个DataInputStream。
客户端的DataOutputStream连接到服务器的DataInputStream;
同时,客户端的DataInputStream连接到服务器的DataOutputStream。
TCP是一个双向的通讯协议,所以数据可以同时通过两个流发生。

DataInputStream dis = new DataInputStream(socket.getInputStream());/接收数据 DataOutputStream dos = new DataOutputStream(socket.getOutputStream());/发送数据

服务器端和客户端完成传输后可以通过close()方法关闭远程连接和监听端口。

既然服务器和客户端都需要交换数据,那么我们可以做一个交换数据的抽象类Communication。
详情请看下一章具体的实现

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜