试试用synchronized 关键字锁定一下你的socket对象.全局变量在你调用的方法里应该初始化一次,因为在一个servlet生命周期里,只会初始化一次;
例如:
....
public class TestServlet extends ...
{
    public String lA = "";
    .....
    private void InitVar()
    {
         lA = "";
         .......
    }
    
    public void doGet(..,..)
    {
       InitVar();//
     }
     ......
}

解决方案 »

  1.   

    用synchronized 关键字锁定一下你的socket对象
    声明的对象,可以是static,构造函数可以用private
      

  2.   

    或者将你的client请求推入到一个队列里面!
    然后由一个线程依次执行
      

  3.   

    可是,在我的Servlet中,初始化Socket的操作是在doGet()中,而且在所有动作完成后,doGet()最后面我就调用destroy()了。等下个客户端请求时,不是应该重新开Servlet实例吗?至于用synchronized 关键字锁定一下你的socket对象,能不能讲详细点?谢过~~~
      

  4.   

    public void doGet()
    {
      //初始化Socket  
      Socket skt;
      skt=new Socket(hostName,9999);
      DataOutputStream outnet=new DataOutputStream(skt.getOutputStream());
      DataInputStream innet=...;  try{
      String cmd=request.getParameter("cmd")
      
      if (cmd == "...")
      {
        //开始向服务端发送数据
        outnet.writebyte();
        ...
        //接受从服务端返回的数据
        type = innet.reabyte();
        //把数据返回客户端
        out.println(type)
        num = innet.readbyte();
        out.println(num);
      }
      }
      catch(IOException e){}
    }
    pbublic void destroy()
    {
       skt.close;
    }客户端程序:发送数据
    URL u = new URL(http://localhost/servlet?cmd=...&hostName=...&...取数据所需要的参数)
    BufferedRead innet=new ...
      // 读取数据
      String InputLine = innet.readln();
      type = 把InputLine转换为Byte大致框架就是如此!我想问题可能会出现在Servlet上。客户端中去数据的部分是每次去10个,所以有一个循环。当客户端取回数据1-9为空值的时候,捕捉异常中的异常处理是:
      continue;
    也就是说,返回刚才1-9重新取一次!中间没有停顿!