---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
1. Java 在网络编程中的应用:
在Internet被广泛使用的今天,网络编程日益重要。Java语言在网络应用中取得了很大成功,已经成为Internet上最流行的一种编程语言。Java语言的网络编程功能非常强大,其相应类库不仅可以开发Internet应用层程序,还可以实现网络底层的通信。
2. 网络传输协议:UDP和 TCP
网络通信协议是计算机间进行通信所要遵循的各种规则的集合。Internet的主要协议有:网络层的IP协议,传输层的TCP、UDP协议,应用层的FTP、HTTP、SMTP等协议。
UDP和TCP的区别:
UDP (User Datagram Protocol):
面向无连接, 数据、源、目的封装在数据包中;
每个数据包的大小限制在64K以内;
是不可靠协议,容易丢包;
由于不需要建立连接,所以速度较快;
TCP (Transmission Control Protocol):
数据传输前需先建立连接,作为数据传输的通道;
通过“三次握手”完成连接,是可靠协议;
连接后,可进行大数据量传输;
由于需要建立连接,效率稍低;
3. IP与 port(通信端口):
IP 地址是一个由32个二进制位构成的整数,用于标识连接到TCP/IP网络中的每台计算机。
端口是一种软件抽象,并不是物理上存在的实体。端口号的取值范围为:0~65535,系统服务保留了使用端口1到端口1024 的权力。
IP地址和端口组成了所谓的Socket,Socket是程序之间双向通信的终结点,是TCP和UDP的基础。
4. 通过 UDP协议编程实现通信:
此类程序需要使用Java类库中的DatagramSocket类和DatagramPacket类。
a) DatagramSocket:是用来发送数据报的Socket,它的构造方法有两种:
DatagramSocket():构造一个用于发送的DatagramSocket类,用于发送端。
DatagramSocket(port):构造一个用于接收的DatagramSocket类,参数port是要监听的端口,用于接收端;
发送端:需要创建DatagramPacket类对象,指定要发送的数据、数据长度、接收主机地址及端口号,然后使用DatagramSocket类对象发送数据报。
接收端:需要创建DatagramPacket类对象,用于将接受到的数据进行缓存。通过该DatagramPacket对象可以获得发送方发送的数据以及发送方的主机地址和端口。
b) DatagramPacket:它是进行数据报通信的基本单位,它包含了需要传送的数据、数据报的长度、IP地址和端口等。它的构造方法有两种:
DatagramPacket(byte [], length):创建一个用于接收数据报的DatagramPacket类对象。byte []是接收数据报的缓冲,length是接收的字节数。
DatagramPacket(byte [], length,InetAddress, port):构造一个用于发送数据的DatagramPackte类对象。byte []是发送数据的缓冲区,length是发送的字节数,InetAddress是接收机器的Internet地址,最后一个参数是接收端的端口号。
c) 下面是通过 UDP协议编程实现简易通信的小程序:
发送端:通过键盘录入发出信息,输入“over”结束通信,代码如下:
importjava.io.*;
importjava.net.*;
public classUDPSend {
public static void main(String[] args)throws IOException {
DatagramSocket sendS =newDatagramSocket(10000);//创建发送端的Socket;
BufferedReader bur=newBufferedReader(new InputStreamReader(System.in));//键盘录入;
String line=null;
while((line=bur.readLine())!=null){
if(line.equals("over")) //通信结束标志;
break;
byte[] bts=line.getBytes();
DatagramPacket dp=newDatagramPacket( //创建DatagramPacket类对象;
bts,bts.length,InetAddress.getByName("192.168.26.200"),10000);
sendS.send(dp); //发送数据;
}
sendS.close();
}
}
接受端:将发送端发出的信息,打印在控制台上,代码如下:
import java.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
public classUDPRecieve {
public static void main(String[] args)throws IOException {
DatagramSocket recieveS=newDatagramSocket(10000);//创建接收端Socket,监听10000端口;
byte[] bts=new byte[1024];
DatagramPacket dp=newDatagramPacket(bts,bts.length); //创建DatagramPacket对象,以便缓冲发送端数据;
while (true){
recieveS.receive(dp);
String mes=newString(dp.getData(),0,dp.getLength());//获取数据报中的信息;
StringsrcHostName=dp.getAddress().getHostName(); //获取发送端的主机名;
StringsrcHostAddress=dp.getAddress().getHostAddress(); //获取发送端的IP地址;
StringsrcPort=dp.getPort()+""; //获取发送端口
System.out.println(mes+"...."+srcHostName+"-"+srcHostAddress+"-"+srcPort);
}
}
}
5. 通过 TCP协议编程实现通信:
TCP编程主要通过ServerSocket类和Socket类实现的;
a) Socket类:用于客户端,通过构造函数Socket(InetAddress, port)建立到服务器端的连接,参数中InetAddress 为服务器端的地址,port为服务器端的监听端口;
b) ServerSocket:用于服务器端,通过构造函数ServerSocket(port)指定监听端口,并通过Socket获取客户端的Socket类对象,并提取输入流和输出流,从而实现和客户端的交互;
c) 下面是通过 UDP协议编程实现简易通信的小程序:
客户端:向服务器端发送消息,等待并接受服务器端的反馈信息,代码如下:
importjava.io.*;
importjava.net.*;
public classTcpClient {
public static void main(String[] args)throws UnknownHostException, IOException {
Socket client=newSocket("192.168.26.102",2000);//创建于服务器端的连接;
OutputStreamout=client.getOutputStream(); //获取输出流;
InputStreamin=client.getInputStream(); //获取输入流;
out.write("你好,客户端".getBytes()); //向服务器端发送信息;
byte[] bts=new byte[1024];
int len=in.read(bts); //结束来自服务器端的信息;
System.out.println(new String(bts,0,len));
client.close();
}
}
服务器端:监听某一端口,等待客户端连接。收到客户端信息后向客户端发送消息做出反馈,代码如下:
importjava.io.*;
importjava.net.*;
public classTcpServer {
public static void main(String[] args)throws IOException {
ServerSocket server=newServerSocket(2000);//监听2000端口;
Socket s=server.accept(); //获取客户端的Socket对象;
OutputStreamout=s.getOutputStream(); //获取输出流;
InputStreamin=s.getInputStream(); //获取输入流;
byte[] bts=new byte[1024];
int len=in.read(bts); //读取客户端发送的信息;
System.out.println(new String(bts,0,len));
out.write("收到,你也好".getBytes()); //向客户端做出反馈;
s.close();
}
}
通过 TCP 协议编程的步骤总结:
客户端:
a) 建立网络连接
客户端网络编程的第一步都是建立网络连接。在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。
b) 交换数据
连接建立以后,就可以通过这个连接交换数据了。交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。
c) 关闭网络连接
在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。
服务器端:
a) 监听端口
服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。
b) 获得连接
当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换。
c) 交换数据
服务器端通过获得的连接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。
d) 关闭连接
重点:TCP协议是面向连接的可靠通讯协议,是安全的,UDP是非连接的不可靠的通讯协议,它的特点是传输的速度快。而这两个协议位于TCP/IP模型的传输层。
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>