server端
package socketcs;import java.awt.BorderLayout;
import java.io.*;
import java.net.*;
import java.awt.event.*;
import java.lang.*;
import javax.swing.*;
public class serversk extends JFrame
{
    JLabel title=new JLabel("服务器监视登录");
    javax.swing.JScrollPane jsp;
    public static javax.swing.JTextArea jta1;
    public serversk()
    {
        this.setLayout(new BorderLayout());
        jsp=new JScrollPane();
        jta1=new JTextArea();
        jta1.setSize(640,480);
        jsp.setViewportView(jta1);
        jta1.setVisible(true);
        this.getContentPane().add(title,BorderLayout.NORTH);
        title.setVisible(true);
        this.getContentPane().add(jsp,BorderLayout.CENTER);
    }
    
    
    public static void main(String[] args)
    {
        serversk sk=new serversk();
        
        sk.setSize(800,600);
        sk.setVisible(true);
        try{
            ServerSocket ss=new ServerSocket(9516);
            Socket s=ss.accept();
            inout ios=new inout(s);
            new Thread(ios).start();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        sk.setDefaultCloseOperation(sk.EXIT_ON_CLOSE);
    }
}class inout implements Runnable
{
    Socket iosocket=null;
    java.io.BufferedReader br=null;
    java.io.BufferedWriter bw=null;
    public inout(Socket ss)
    {
        this.iosocket=ss;
    }    public void run() {
        try
        {
            bw=new BufferedWriter(new java.io.OutputStreamWriter(iosocket.getOutputStream()));
            br=new BufferedReader(new java.io.InputStreamReader(iosocket.getInputStream()));
            if(true)
            {
                String gets=br.readLine();
                serversk.jta1.append(gets);
            }
            bw.write("收到");
            bw.flush();
            bw.close();
            br.close();
            this.iosocket.close();
        }
        catch(Exception ex)
        {
            
        }
    }
}
client端
package h;
import java.io.*;
import java.net.*;
import javax.swing.*;public class cinout extends javax.swing.JFrame {
     
    java.net.Socket c=new Socket();
    java.net.SocketAddress link_sa=null;
    BufferedWriter cout=null;
    BufferedReader cin=null;
    String link_sports="9516";
    String link_server_ip=null;
    boolean flag=false;
    public cinout() {
        initComponents();
        
    }
                             
    private void initComponents() {
//介面代码略
}                  
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
       
         try{
             if(cjtf1.getText().length()>0)
             {
                 if(flag==false)
                 {
                     link_server_ip=java.net.InetAddress.getByName("www.abc.net").getHostAddress().toString();
                     link_sa=new java.net.InetSocketAddress(link_server_ip,java.lang.Integer.parseInt(link_sports));
                     c.connect(link_sa);
                     flag=true;
                 }
                     cin=new BufferedReader(new java.io.InputStreamReader(c.getInputStream()));
                     cout=new BufferedWriter(new java.io.OutputStreamWriter(c.getOutputStream()));
                     cout.write(cjtf1.getText()+"\n");
                     cout.flush();
                     if(true)
                     {
                         String appstr=cin.readLine();
                         cjta1.append(appstr);
                     }
                     cout.close();
                     cin.close();
                     c.close();
             }
             else
             {
                 cjtf1.setText("请输入信息");
             }
             
         }
         catch(Exception e)
         {
             e.printStackTrace();
         }
         
    }                                        
        public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new cinout().setVisible(true);
            }
        });
    }
    
    // 变量声明 - 不进行修改                     
    private javax.swing.JTextArea cjta1;
    private javax.swing.JTextField cjtf1;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    // 变量声明结束                   
    
}客户端第二次按下按钮后,报错如下:
java.net.SocketException: Socket is closed
        at java.net.Socket.getInputStream(Socket.java:753)
        at hhchat.cinout.jButton1ActionPerformed(cinout.java:104)
        at hhchat.cinout.access$000(cinout.java:15)
        at hhchat.cinout$1.actionPerformed(cinout.java:50)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
        at java.awt.Component.processMouseEvent(Component.java:5488)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1766)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【cqandy】截止到2008-07-30 18:19:59的历史汇总数据(不包括此帖):
    发帖的总数量:17                       发帖的总分数:650                      每贴平均分数:38                       
    回帖的总数量:16                       得分贴总数量:1                        回帖的得分率:6%                       
    结贴的总数量:15                       结贴的总分数:500                      
    无满意结贴数:1                        无满意结贴分:50                       
    未结的帖子数:2                        未结的总分数:150                      
    结贴的百分比:88.24 %               结分的百分比:76.92 %                  
    无满意结贴率:6.67  %               无满意结分率:10.00 %                  
    楼主加油

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=cqandy
      

  2.   

      c.close(); 
     不是被你关掉了吗
      

  3.   

    我把c.close();取消掉,一样也报错呀
      

  4.   

    你的Server端就accept了一次链接啊,第二次来连当然不能连上了。
            try{
                ServerSocket ss=new ServerSocket(9516);
                Socket s=ss.accept();
                inout ios=new inout(s);
                new Thread(ios).start();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            } 应该是这样:
    public void run() {
            while(true){
                try{
                ServerSocket ss=new ServerSocket(9516);
                Socket s=ss.accept();
                inout ios=new inout(s);
                new Thread(ios).start();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            } 
            }
        }
      

  5.   

    我把c.close();取消掉,报的错:java.net.SocketException: Software caused connection abort: socket write error
            at java.net.SocketOutputStream.socketWrite0(Native Method)
            at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
            at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
            at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
            at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
            at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
            at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
            at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
            at java.io.BufferedWriter.flush(BufferedWriter.java:236)
            at hhchat.cinout.jButton1ActionPerformed(cinout.java:107)
            at hhchat.cinout.access$000(cinout.java:15)
            at hhchat.cinout$1.actionPerformed(cinout.java:50)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
            at java.awt.Component.processMouseEvent(Component.java:5488)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
            at java.awt.Component.processEvent(Component.java:5253)
            at java.awt.Container.processEvent(Container.java:1966)
            at java.awt.Component.dispatchEventImpl(Component.java:3955)
            at java.awt.Container.dispatchEventImpl(Container.java:2024)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
            at java.awt.Container.dispatchEventImpl(Container.java:2010)
            at java.awt.Window.dispatchEventImpl(Window.java:1766)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
      

  6.   

    5楼说的对,应该搞一个while来监听accept
      

  7.   

    老师,我把我改过后,一样报错的代码全贴出来,请老师在您的机器上调试下,指点!谢谢server:
    package socketcs;import java.awt.BorderLayout;
    import java.io.*;
    import java.net.*;
    import java.awt.event.*;
    import java.lang.*;
    import javax.swing.*;
    public class serversk extends JFrame implements Runnable
    {
        JLabel title=new JLabel("服务器监视登录");
        javax.swing.JScrollPane jsp;
        public static javax.swing.JTextArea jta1;
        public serversk()
        {
            this.setLayout(new BorderLayout());
            jsp=new JScrollPane();
            jta1=new JTextArea();
            jta1.setSize(640,480);
            jsp.setViewportView(jta1);
            jta1.setVisible(true);
            this.getContentPane().add(title,BorderLayout.NORTH);
            title.setVisible(true);
            this.getContentPane().add(jsp,BorderLayout.CENTER);
        }
        
        
        public static void main(String[] args)
        {
            serversk sk=new serversk();
            
            sk.setSize(800,600);
            sk.setVisible(true);
            sk.run();
                
            
            //sk.setDefaultCloseOperation(sk.EXIT_ON_CLOSE);
        }    public void run() {
            while(true)
            {
                try{
                ServerSocket ss=new ServerSocket(9517); 
                Socket s=null;
                s=ss.accept();
                inout ios=new inout(s); 
                new Thread(ios).start(); 
                }
                catch(Exception e)
                {
                    
                }
            }
        }
    }class inout implements Runnable
    {
        Socket iosocket=null;
        java.io.BufferedReader br=null;
        java.io.BufferedWriter bw=null;
        public inout(Socket ss)
        {
            this.iosocket=ss;
        }    public void run() {
            try
            {
                bw=new BufferedWriter(new java.io.OutputStreamWriter(iosocket.getOutputStream()));
                br=new BufferedReader(new java.io.InputStreamReader(iosocket.getInputStream()));
                if(true)
                {
                    String gets=br.readLine();
                    serversk.jta1.append(gets);
                }
                bw.write("收到");
                bw.flush();
                bw.close();
                br.close();
                this.iosocket.close();
            }
            catch(Exception ex)
            {
                
            }
        }
    }
      

  8.   

    //client端
    package h;
    import java.io.*;
    import java.net.*;
    import javax.swing.*;
    /**
     *
     * @author  Administrator
     */
    public class cinout extends javax.swing.JFrame {
        
        /** Creates new form cinout */
        
        java.net.Socket c=new Socket();
        java.net.SocketAddress link_sa=null;
        BufferedWriter cout=null;
        BufferedReader cin=null;
        String link_sports="9517";
        String link_server_ip=null;
        boolean flag=false;
        public cinout() {
            initComponents();
            
        }
        
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">                          
        private void initComponents() {
            jLabel1 = new javax.swing.JLabel();
            cjtf1 = new javax.swing.JTextField();
            jButton1 = new javax.swing.JButton();
            jScrollPane1 = new javax.swing.JScrollPane();
            cjta1 = new javax.swing.JTextArea();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            jLabel1.setText("\u5185\u5bb9:");        jButton1.setText("\u53d1\u9001");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });        cjta1.setColumns(20);
            cjta1.setRows(5);
            jScrollPane1.setViewportView(cjta1);        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                        .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                            .add(30, 30, 30)
                            .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE))
                        .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                            .addContainerGap()
                            .add(jLabel1)
                            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                            .add(cjtf1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 248, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                            .add(jButton1)))
                    .addContainerGap(45, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                    .addContainerGap()
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 242, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 15, Short.MAX_VALUE)
                    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jLabel1)
                        .add(cjtf1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(jButton1))
                    .addContainerGap())
            );
            pack();
        }// </editor-fold>                            private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO 将在此处添加您的处理代码:
            
             try{
                 if(cjtf1.getText().length()>0)
                 {
                     if(flag==false)
                     {
                         link_server_ip=java.net.InetAddress.getByName("www.abc.net").getHostAddress().toString();
                         link_sa=new java.net.InetSocketAddress(link_server_ip,java.lang.Integer.parseInt(link_sports));
                         c.connect(link_sa);
                         flag=true;
                     }
                         cin=new BufferedReader(new java.io.InputStreamReader(c.getInputStream()));
                         cout=new BufferedWriter(new java.io.OutputStreamWriter(c.getOutputStream()));
                         cout.write(cjtf1.getText()+"\n");
                         cout.flush();
                         if(true)
                         {
                             String appstr=cin.readLine();
                             cjta1.append(appstr);
                         }
                         //cout.close();
                         //cin.close();
                         //c.close();
                         
                         flag=false;
                 }
                 else
                 {
                     cjtf1.setText("请输入信息");
                 }
                 
             }
             catch(Exception e)
             {
                 e.printStackTrace();
             }
             
        }                                        
        
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new cinout().setVisible(true);
                }
            });
        }
        
        // 变量声明 - 不进行修改                     
        private javax.swing.JTextArea cjta1;
        private javax.swing.JTextField cjtf1;
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JScrollPane jScrollPane1;
        // 变量声明结束                   
        
    }
      

  9.   

        private void initComponents() { 
            jLabel1 = new javax.swing.JLabel(); 
            cjtf1 = new javax.swing.JTextField(); 
            jButton1 = new javax.swing.JButton(); 
            jScrollPane1 = new javax.swing.JScrollPane(); 
            cjta1 = new javax.swing.JTextArea();         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
            jLabel1.setText("\u5185\u5bb9:");         jButton1.setText("\u53d1\u9001"); 
            jButton1.addActionListener(new java.awt.event.ActionListener() { 
                public void actionPerformed(java.awt.event.ActionEvent evt) { 
                    jButton1ActionPerformed(evt); 
                } 
            }); 
      

  10.   

    呵呵,程序调试技能需要提高啊!给你调了一下,你的客户端有点问题
    你的客户端类第一句java.net.Socket c=new Socket(); 这样在初始化对象的时候创建了c是一个Socket
    第一次点的时候用c.connect连接了,第二次点还是这个对象,再用c.connect就不行了
    或者报错说连接已经存在(如果你没close),或者说连接已经reset了(如果你close了连接)
    你应该在c.connect前重新new 一下c这个Socket。而且这个变量好像是函数内变量就可以了,不需要做类变量的。