Java Socket编程之四

本文介绍了一个简单的UDP回应服务器实现过程,包括如何创建UDP socket、接收数据包、解析客户端信息及发送回应数据包等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导读:
  重复和并发服务器
  所有的这些调用都可以掷出一个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);
  Java Socket编程之一
  Java Socket编程之二
  Java Socket编程之三
  Java Socket编程之四
  Java Socket编程之五
  
  重复和并发服务器 所有的这些调用都可以掷出一个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); Java Socket编程之一Java Socket编程之二Java Socket编程之三Java Socket编程之四Java Socket编程之五

本文转自
http://www.cn-java.com/www1/?action-viewnews-itemid-896
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值