JAVA网络编程入门

来源:互联网 发布:指针处理数组 编辑:程序博客网 时间:2024/06/05 14:20

一、网络编程协议简介

当前Internet采用的网络协议是:TCP/IP协议(Transmission Control Protocol/Internet Protocol)。

这里初学因此只了解TCP/IP协议栈中的TCP(Transmission Control Protocol)与UDP(User Datagram Protocol)两个高级协议。

1、TCP

TCP协议是一种以固线连接为基础的协议。它提供两台计算机之间可靠的数据传送。并且它可以保证抵达的数据的排列顺序和送出时的顺序相同,因此它适用于可靠性要求较高的场合。但TCP在认证上存在的额外耗费可能使传输速度减慢。

例如:HTTP从某个URL读取数据时,如果顺序出现错误就会导致HTML文件的混乱。

2、UDP

UDP协议是无连接通信协议,不保证数据的可靠性,但是可以向多个目标发送信息,接受来自多个源的数据。UDP以独立发送数据包的方式进行。

例如:对于网络聊天室,这样的场合要求传输速率和实效非常高,但它对数据传输的可靠性要求不是很高,即使丢失了一两个数据也不会有很大的影响。

3、端口和套接字

在网络程序设计中,端口是一个假想的连接装置。端口被设置为0-65535之间的整数,位于IP地址的冒号后,通过端口可以确定某个客户端连接到服务器的哪像服务上,比如HTTP服务一般使用80端口,FTP服务一般使用21端口。
通常0-1023端口都用于一些知名的网络服务和应用。因此在我们个人的程序设计中应该使用1024以上的端口数来避免端口号冲突。

网络应用程序中的套接字(Socket)用于将应用程序与端口连接起来。Java将套接字抽象化为类,在使用中我们只需创建一个Socket对象即可。

二、TCP程序设计基础

1、InetAddress类是与IP地址相关的类。常用方法:
getLocalHost()——返回本地主机的InetAddress对象
getHostName()——获取此IP地址的主机名
getHostAddress()——获取InetAddress对象所含的IP地址
getByName(String host)——获取与Host相对应的InetAddress对象

2、ServerSocket类
该类用来表示服务器套接字。它可通过制定的端口号来等待连接的客户端套接字,通过调用accept()方法(等待客户机的连接。若连接,则创建一套接字)来返回一个和客户端socket对象连接的服务器端Socket对象,服务器端socket对象使用getOutputStream()方法获得的输出流将指向客户端socket对象使用getInputStream()方法获得的那个输入流;反过来说,服务器端的socket对象使用getInputStream()方法获得的输入流将指向客户端socket对象使用getOutputStream()方法获得的那个输出流。实现了数据的传输。
此外,服务器套接字一次只可以与一个套接字连接。多台客户机同时发出连接请求时服务器套接字会将它们放入队列中逐个连接。队列的默认大小是50。

3、TCP程序服务器过程:服务器创建一个指定端口号的ServerSocket对象并调用accept()方法等待客户机来连接。当有客户机连接时,accept()方法返回一个与该客户机连接的Socket对象,而后服务器实例化一个输入流对象并调用readLine()方法来接收数据。
TCP程序客户机过程:客户机实例化一个socket对象来连接指定端口号的服务器。然后实例化一个输出流,将要传输的数据写入输出流后即可在服务器端接收到所输入的数据。

三、UDP程序设计基础

基于UDP通信的基本模式如下:

将数据打包(称为数据包),然后将数据包发往目的地。(在发送程序时通常不需要指定端口号)

1)使用DatagramSocket()创建一个数据包套接字。
2)使用DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)创建要发送到数据包
3)使用DatagramSocket类的send()方法发送数据包。

接收别人发来的数据包,然后查看数据包。(在接受程序时必须指定一个端口号)

1)使用DatagramSocket(int port)创建数据包套接字,绑定到指定的端口。
2)使用DatagramPacket(byte[] buf,int length)创建字节数组来接受数据包。
3)使用DatagramPacket类的receive()方法接收UDP包。