服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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);

扫描关注微信公众号