你可以看看你的程序是不是在关闭了socket链接后,又进行了socket通讯。

解决方案 »

  1.   

    注意:关闭Socket的位置是否恰当、是否flush?
      

  2.   

    我把Applet和Servlet的程序贴上来,两位请看看有什么不妥的地方
      

  3.   

    Applet的代码,文件名是:PostClient.java
    import java.net.*;
    import java.io.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    import javax.swing.*;
    class PostClientPanel extends JPanel implements ActionListener
    {
    public PostClientPanel()
    {
    strOutput=new String("输出初始化!");
    vctFromServ.clear();
    vctFromServ.add("输入初始化!");

    cmdStep1=new JButton("第一步");
    cmdStep2=new JButton("第二步");

    add(cmdStep1);
    add(cmdStep2);

    cmdStep1.addActionListener(this);
    cmdStep2.addActionListener(this);

    }

    public void actionPerformed(ActionEvent evt)
    {
    Object source=evt.getSource();
    if(source==cmdStep1)
    {
    strOutput="第一步";
    try
    {  
    //向server发送消息
    System.out.println("Before Step1 connection!");
         url=new URL("http://localhost/PostServer");
          con=url.openConnection();
          con.setUseCaches(false);
          con.setDoOutput(true);
          con.setDoInput(true);
          ByteArrayOutputStream byteout=new ByteArrayOutputStream();
          DataOutputStream out=new DataOutputStream(byteout);
          out.writeUTF("第一步");
          out.flush();
          byte buf[]=byteout.toByteArray();
          con.setRequestProperty("Content-type","application/octet-stream");
          con.setRequestProperty("Content-length",""+buf.length);
          DataOutputStream dataout=new DataOutputStream(con.getOutputStream());
          dataout.write(buf);
          dataout.flush();
          dataout.close();
          out.close();
          byteout.close();
        }
        catch(IOException e)
        {
         System.out.println("OUTPUT ERROR:"+e);
        }
        try
        {
          //从server接收消息
          DataInputStream in=new DataInputStream(con.getInputStream());
          vctFromServ.clear();
          String strInput;
          while((strInput=in.readUTF())!=null)
          {
          vctFromServ.add(strInput);
          }
          in.close();
      }
       catch(IOException e)
        {  
         System.out.println("INPUT Error " + e);
        }
    }
    else
    {
    strOutput="第二步";
    try
    {  
         
         System.out.println("Before Step2 connection!");
         url=new URL("http://localhost/PostServer");
          con=url.openConnection();
          con.setUseCaches(false);
          con.setDoOutput(true);
          con.setDoInput(true);
          ByteArrayOutputStream byteout=new ByteArrayOutputStream();
          DataOutputStream out=new DataOutputStream(byteout);
          out.writeUTF("第二步");
          out.flush();
          byte buf[]=byteout.toByteArray();
          con.setRequestProperty("Content-type","application/octet-stream");
          con.setRequestProperty("Content-length",""+buf.length);
          DataOutputStream dataout=new DataOutputStream(con.getOutputStream());
          dataout.write(buf);
          dataout.flush();
          dataout.close();
         
          DataInputStream in=new DataInputStream(con.getInputStream());
          vctFromServ.clear();
          String strInput;
          while((strInput=in.readUTF())!=null)
          {
          vctFromServ.add(strInput);
          }
      }
       catch(IOException e)
        {  
         System.out.println("Error " + e);
        }
    }
    repaint();
    }

    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    g.drawString(strOutput,200,200);
    int tmpX=200;
    int tmpY=250;
    for(int i=0;i<vctFromServ.size();i++)
    {
    g.drawString((String)vctFromServ.elementAt(i),tmpX,tmpY);
    tmpY+=50;
    }
    }


    private String strOutput;
    private Vector vctFromServ=new Vector();
    private JButton cmdStep1;
    private JButton cmdStep2;
    private URL url;
    private URLConnection con;
    } public class PostClient extends JApplet
       
    {  public void init()
       {  Container contentPane = getContentPane();
          contentPane.add(new PostClientPanel());      
       }   
    }
      

  4.   

    Servlet的代码,文件名是:PostServer.java
    /**
     * version 1.00 1999-08-27
     * author Cay Horstmann
     */import java.io.*;
    import java.net.*;
    import javax.servlet.*;
    import javax.servlet.http.*;public class PostServer extends HttpServlet
    {  
    public void service(HttpServletRequest req,HttpServletResponse resp)
    {
    try
    {
    //接收从客户端发来的数据
    DataInputStream in=new DataInputStream(req.getInputStream());
    strChoice=in.readUTF().trim();
    System.out.println("strChoice="+strChoice);
    in.close();

    //向客户端发送数据
    resp.setContentType("application/octet-stream");
    byteout=new ByteArrayOutputStream();
    out=new DataOutputStream(byteout);
    if(strChoice.equals("第一步"))
    {
    out.writeUTF("第一步回复1!");
    out.writeUTF("第一步回复2!");
    }
    else if(strChoice.equals("第二步"))
    {
    out.writeUTF("第二步回复1!");
    out.writeUTF("第二步回复2!");
    out.writeUTF("第二步回复3!");
    out.writeUTF("第二步回复4!");
    }
    out.flush();

    buf=byteout.toByteArray();
    resp.setContentLength(buf.length);
    servletout=resp.getOutputStream();
    servletout.write(buf);
    servletout.close();
    byteout.close();
    out.close();

    }
    catch(IOException ex)
    {
    System.out.println("out3 ERROR:"+ex);
    }

    }

    private String strChoice;
    private byte[] buf;
    private ServletOutputStream servletout;
    private ByteArrayOutputStream byteout;
    private DataOutputStream out;}
      

  5.   

    flytsu(卡休) & Mailbomb(网络咖啡) 拜托,代码已经贴上来了,能否看一下?谢谢
      

  6.   

    byteout.close();
    out.close();变一下顺序,out.close()应该在前面
      

  7.   

    to xiangqian(天阁流云):
    照作了但还是有相同违例被掷出
      

  8.   

    try to close "in" after you call servletout.write(buf). 
      

  9.   

    servlet有一个public void destroy(){},在这里面关闭socket
      

  10.   

    to wwangl(???)能够在详细点吗?谢谢
      

  11.   

    试一下import java.io.*;
    import java.net.*;
    import javax.servlet.*;
    import javax.servlet.http.*;public class PostServer extends HttpServlet
    {  
    public void service(HttpServletRequest req,HttpServletResponse resp)
    {
    try
    {
    //接收从客户端发来的数据
    DataInputStream in=new DataInputStream(req.getInputStream());
    strChoice=in.readUTF().trim();
    System.out.println("strChoice="+strChoice);
    in.close();//向客户端发送数据
    resp.setContentType("application/octet-stream");
    byteout=new ByteArrayOutputStream();
    out=new DataOutputStream(byteout);
    if(strChoice.equals("第一步"))
    {
    out.writeUTF("第一步回复1!");
    out.writeUTF("第一步回复2!");
    }
    else if(strChoice.equals("第二步"))
    {
    out.writeUTF("第二步回复1!");
    out.writeUTF("第二步回复2!");
    out.writeUTF("第二步回复3!");
    out.writeUTF("第二步回复4!");
    }
    out.flush();buf=byteout.toByteArray();
    resp.setContentLength(buf.length);
    servletout=resp.getOutputStream();
    servletout.write(buf);
    }
    catch(IOException ex)
    {
    System.out.println("out3 ERROR:"+ex);
    }}
    public void destroy(){
      try{
        servletout.close();
        byteout.close();
        out.close();
      }catch(Exception e){System.out.println(e);}private String strChoice;
    private byte[] buf;
    private ServletOutputStream servletout;
    private ByteArrayOutputStream byteout;
    private DataOutputStream out;}
      

  12.   

    import java.io.*;
    import java.net.*;
    import javax.servlet.*;
    import javax.servlet.http.*;public class PostServer extends HttpServlet
    {  
    public void service(HttpServletRequest req,HttpServletResponse resp)
    {
    try
    {
    //接收从客户端发来的数据
    DataInputStream in=new DataInputStream(req.getInputStream());
    strChoice=in.readUTF().trim();
    System.out.println("strChoice="+strChoice);
    //向客户端发送数据
    resp.setContentType("application/octet-stream");
    byteout=new ByteArrayOutputStream();
    out=new DataOutputStream(byteout);
    if(strChoice.equals("第一步"))
    {
    out.writeUTF("第一步回复1!");
    out.writeUTF("第一步回复2!");
    }
    else if(strChoice.equals("第二步"))
    {
    out.writeUTF("第二步回复1!");
    out.writeUTF("第二步回复2!");
    out.writeUTF("第二步回复3!");
    out.writeUTF("第二步回复4!");
    }
    out.flush();buf=byteout.toByteArray();
    resp.setContentLength(buf.length);
    servletout=resp.getOutputStream();
    servletout.write(buf);
    }
    catch(IOException ex)
    {
    System.out.println("out3 ERROR:"+ex);
    }}
    public void destroy(){
      try{
        in.close();
        servletout.close();
        byteout.close();
        out.close();
      }catch(Exception e){System.out.println(e);}private String strChoice;
    private byte[] buf;
    private ServletOutputStream servletout;
    private ByteArrayOutputStream byteout;
    private DataOutputStream out;}
      
      

  13.   

    to wwangl(???)
    谢谢用你的方法问题解决了,给分