Java网络编程(二)

1.Socket和ServerSocket类

(1)套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。当连接建立时,服务器会创建一个Socket对象。客户端和服务器现在可以通过对Socket对象的写入和读取来进行进行通信。java.net.Socket类代表一个套接字,并且java.net.ServerSocket类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:

  • 服务器实例化一个ServerSocket对象,表示通过服务器上的端口通信。
  • 服务器调用 ServerSocket类 的accept()方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
  • 服务器正在等待时,一个客户端实例化一个Socket对象,指定服务器名称和端口号来请求连接。
  • Socket类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个Socket对象能够与服务器进行通信。
  • 在服务器端,accept()方法返回服务器上一个新的socket引用,该socket连接到客户端的socket。

连接建立后,通过使用I/O流在进行通信。每一个socket都有一个输出流和一个输入流。客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。

(2)

     

Socket 类的方法

java.net.Socket类代表客户端和服务器都用来互相沟通的套接字。客户端要获取一个Socket对象通过实例化 ,而 服务器获得一个Socket对象则通过accept()方法的返回值。

Socket类有五个构造方法.

2.DatagramSocket类和DatagramSocket类

(1)java中通过两个类来实现UDP协议顶层的数据报:DatagramPacket对象是数据容器,DatagramSocket是用来发送和接受DatagramPacket的套接字。采用UDP通信机制下,在发送信息时,首先要将数据打包,然后将打包好的数据包发送目的地。在接收信息时,首先接收别人发来的数据报,然后查看数据报中的内容。

(2)DatagramPacket类

       要发送或接收数据报,需要用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包。

         重要的构造方法:

         DatagramPacket(byte[] buf,int length)   构造数据包对象,用来接收长度为length的数据包

         DatagramPacket(byte[] buf,int length,InetAddress address,int port)  构造数据包,用来将length长度的数据包发送到指定主机上的指定端口号

         DatagramPacket(byte[] buf,int offset,int length)

         DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)

         DatagramPacket(byte[] buf,int offset,int length,SocketAddress address)

         DatagramPacket(byte[] buf,int length,SocketAddress address)

        常用方法:

        InetAddress getAddress()   返回某台机器的IP地址,此数据报是将要发往该主机或是从该主机接收到的

        byte[] getData()    返回数据缓冲区

        int getLength()    返回将要发送或是接收的数据包的数据长度

        SocketAddress getSocketAddress() 获取要将此包发送到的或是发出此数据报的远程主机的SocketAddress(通常为IP地址+端口号)

        void setAddress(InetAddress iaddr) 设置要将此数据报发往的那台机器的IP地址

        void setData(byte[] buf)  为此包设置数据缓冲区

      DatagramSocket类

      DatagramSocket类是用来发送和接收数据包的套接字,负责将打包的数据包发送到目的地,或是从目的地接收数据包

         重要的构造方法

         DatagramSocket(int port)   创建数据报套接字并将其绑定到本地主机上的指定的端口

         常用方法

         void receive(DatagramPacket p)  从此套接字接收数据报包

         void send(DatagramPacket p)  从此套接字发送数据包

(3)代码实现

//将“你好”封装成数据包,发送到目的主机“www.baidu.com”,端口号为2016上
byte buff[] = "你好".getByte();  
InetAddress destAddress = InetAddress.getByName("www.baidu.com");  
DatagramPacket dataPacket = new DatagramPacket(buff,buff.length,destAddress,2016);  
DatagramSocket sendSocket = new DatagramSocket();  
sendSocket.send(dataPacket);  

//接收外界发送到本机2016号端口的数据包
byte buff[] = new byte[8192];  
DatagramPacket receivePacket = new DatagramPacket(buff,buff.length);  
DatagramSocket receiveSocket = new DatagramSocket(2016);  
receiveSocket.receive(receivePacket);  
int length = receivePacket.getLength();  
String message = new String(receivePacket.getData(),0,length);  
System.out.println(message);

 

posted @ 2014-10-01 23:32  fosmj  阅读(337)  评论(0编辑  收藏  举报