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毫秒