龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java Socket编程(四)-2

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
重复和并发服务器 所有的这些调用都可以掷出一个UnknownHostException违例.假如一台计算机没有连接上DNS服务器,或者主机的确没有找到,这个违例就会被掷出.假如一台计算机没有一个激活的

  重复和并发服务器
  
  所有的这些调用都可以掷出一个UnknownHostException违例.假如一台计算机没有连接上DNS服务器,或者主机的确没有找到,这个违例就会被掷出.假如一台计算机没有一个激活的TCP/IP配置,getLocalHost()也为失败并掷出一个违例.
  
  一旦一个地址被确定了,数据报就可以被送出了.下面的程序传输了一个字符串给目的socket:
  
  String toSend = "This is the data to send!");
  byte[] sendbuf = new byte[ toSend.length() ];
  toSend.getBytes( 0, toSend.length(), sendbuf, 0 );
  DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length,
  addr, port);
  clientSocket.send( sendPacket );
  
  首先,字符串必须被转换成一个字节数组.然后,一个新的DatagramPacket实例必须被建立.注重构建器的最后两个参数.因为要发送一个包,所以地址和端口必须被给定.一个applet可能可以知道它的服务器的地址,但是服务器如何知道它的客户机的地址呢.当任何一个包被收到后,返回的地址和端口会被解压出来,并通过getAddress()和getPort()方法得到.这就是一个服务器如何回应一个客户端的包:
  
  DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length,
  recvPacket.getAddress(), recvPacket.getPort() );
  serverSocket.send( sendPacket );
  
  不像面向连接的操作,数据报服务器服务器其实比数据报客户端更简单:
  
  数据报服务器
  
  一个数据报服务器的基本步骤:
  
  1.在一个指定的端口上建立一个数据报socket.
  
  2.用receive方法等待进来的包.
  
  3.用特定的协议往返应收到的包.
  
  4.回到第二步或继续第二步.
  
  5.关闭数据报socket.
  
  列表9.3演示了一人简单的数据报回应服务器.它将回应它收到的包.
  
  列表9.3.一个简单的数据报回应服务器
  
  import Java.io.*;
  import java.net.*;
  public class SimpleDatagramServer
  {
  public static void main(String[] args)
  {
  DatagramSocket socket = null;
  DatagramPacket recvPacket, sendPacket;
  try
  {
  socket = new DatagramSocket(4545);
  while (socket != null)
  {
  recvPacket= new DatagramPacket(new byte[512], 512);
  socket.receive(recvPacket);
  sendPacket = new DatagramPacket(
  recvPacket.getData(), recvPacket.getLength(),
  recvPacket.getAddress(), recvPacket.getPort() );
  socket.send( sendPacket );
  }
  }
  catch (SocketException se)
  {
  System.out.println("Error in SimpleDatagramServer: " + se);
  }
  catch (IOException ioe)
  {
  System.out.println("Error in SimpleDatagramServer: " + ioe);
  
精彩图集

赞助商链接