Java 版 (精华区)

发信人: DreamWeaver (我是流氓,我谁都怕), 信区: Java
标  题: Java Socket编程(四)-2
发信站: 哈工大紫丁香 (2002年08月17日10:45:58 星期六), 站内信件

重复和并发服务器 

所有的这些调用都可以掷出一个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);
        }
    }
}

--
        ╭-╮╭╮╭-╮ ╭╮             .  . . . .∴∷.‥˙.˙..‥¨¨ 
        │0││││0│ ││                        ╱. .¨. . . ∴ ∵¨
        ╯▂ ╰╯╯ ╰-╯╯     妮妮啊~      ∕  ╱ /       .∵∵.  .  
        ◢█◣      ▃▅◣  ▁▃            ∕ ╱  /             .∵         
     ◢████◣◢████◣    ▆▃      ··                  ¨ ..       
   ◢███████◣         ◣      ▄    好想和你一起去看流星雨 Q_Q                 你看到我的妮妮了吗? Q_Q 

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.239.4]
※ 修改:·DreamWeaver 於 08月17日10:54:34 修改本文·[FROM: 202.118.239.4]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.749毫秒