我写了一个servlet, 当用户通过url调用用servlet时,servlet会通过udp通讯向用户的一个client程序发送数据。现在当单个用户发送请求时,程序正常,发送数据正常。
但是当多个用户同时请求时,就有问题了,服务器上提示:ip Address cannot bind,in use.
书上不是说,默认情况下,servlet是多线程的吗。这是怎么回事。望高人解决,帮我改一下代码,不胜感谢,急啊(因为我是新手)。代码如下:
public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException
{
//发送数据到Client,指定端口号/////////////////////////////////////////////
DatagramSocket cli=null;
String to=null;
String reqString = req.getQueryString(); //读入参数
//System.out.println(reqString);
if(reqString == null) {
to = "提示:";
}
else {
to=getRightString(reqString,"to=") ; //取得要发的数据
}
try
{
byte sb[]=new byte[512];
String sen="show/to="+to; //向client发送
sb=sen.getBytes();
String ip=GetUserIP(to) ;
if (ip==null) return ;
DatagramPacket pac=new DatagramPacket(sb,sb.length,InetAddress.getByName(ip),1111);
cli=new DatagramSocket(2222);
cli.send(pac);
}
catch(SocketException se)
{
se.printStackTrace();
}
catch(IOException ie)
{
ie.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
finally {
if (cli != null) {
cli.close() ;
cli.disconnect() ;
}
}
}}
但是当多个用户同时请求时,就有问题了,服务器上提示:ip Address cannot bind,in use.
书上不是说,默认情况下,servlet是多线程的吗。这是怎么回事。望高人解决,帮我改一下代码,不胜感谢,急啊(因为我是新手)。代码如下:
public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException
{
//发送数据到Client,指定端口号/////////////////////////////////////////////
DatagramSocket cli=null;
String to=null;
String reqString = req.getQueryString(); //读入参数
//System.out.println(reqString);
if(reqString == null) {
to = "提示:";
}
else {
to=getRightString(reqString,"to=") ; //取得要发的数据
}
try
{
byte sb[]=new byte[512];
String sen="show/to="+to; //向client发送
sb=sen.getBytes();
String ip=GetUserIP(to) ;
if (ip==null) return ;
DatagramPacket pac=new DatagramPacket(sb,sb.length,InetAddress.getByName(ip),1111);
cli=new DatagramSocket(2222);
cli.send(pac);
}
catch(SocketException se)
{
se.printStackTrace();
}
catch(IOException ie)
{
ie.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
finally {
if (cli != null) {
cli.close() ;
cli.disconnect() ;
}
}
}}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货