public class FiveClient extends JApplet implements Runnable{
        JButton b1=new JButton("Send");
        JTextArea t1=new JTextArea("",10,40);
        JTextArea t2=new JTextArea("",10,40);
        JScrollPane pane1,pane2;
        Container ctp=getContentPane();
        Thread rtd;
        public void init(){
             try{
                 ctp.setLayout(new FlowLayout());
                 ctp.add(b1);                 t1.setLineWrap(true);
                 t1.setFont(new Font("宋体",Font.PLAIN,16));
          pane1=new JScrollPane(t1);
          ctp.add(pane1);          t2.setLineWrap(true);
          t2.setFont(new Font("宋体",Font.PLAIN,16));
          pane2=new JScrollPane(t2);
          ctp.add(pane2);          b1.addActionListener(new kolistener());
          rtd=new Thread(this); 
          rtd.start();              //★★★启动线程,不能接收,甚至连发送都不行了
          }
      catch(Exception e){}
      }     public void run(){
         while(true){
           //接收
           try{
              Socket c1=new Socket("10.5.1.4",8888);
              BufferedReader input=new BufferedReader(new InputStreamReader(c1.getInputStream()));
              char []b=new char[200];
              int n=input.read(b,0,200);
              String str=new String(b,0,n);
              System.out.println(str);
              t1.setText(str);
              input.close();
              c1.close();
              Thread.sleep(3000);
              }
           catch(Exception e){
              System.out.print("Client Thread:"+e.toString());
              }
           }
         }               class kolistener implements ActionListener{
          public void actionPerformed(ActionEvent ae){
              //发送
              try{Socket c=new Socket("10.5.1.4",8888); 
                  PrintWriter output=new PrintWriter(c.getOutputStream(),true);
                  output.println(t2.getText());   
                  output.close();
                  c.close();
                  }
              catch(Exception ie){
                  t1.setText("Client2:"+ie.toString());
                  }
              }
         }
 }

解决方案 »

  1.   

    我曾写了一个围棋的程序(可惜源程序已丢失,要不可以发给你),我的思路是:只写一个应用程序,不用分开写服务器端和客户端,但菜单中提供客户选择自己做为哪一端,客户端需要手工写入作为服务器端的一方的IP地址,客户端与服务器的通讯只是简单地通过socket传递棋子的id,坐标等信息,当然这需要给这些数据前面加上一些头信息,以让对方识别.比如id_XXX表示传送的是id信息,location_XXX表示传送的是坐标信息,当对方接收到这些数据进行解析后执行相应的方法(如棋子的移动,删除等方法).也就是说你所看到对方的棋子的行动情况完全是在本地执行的,对方传递过来的不过是一些指令信息而已.
      

  2.   

    为什么必须先有PrintWriter,BufferedReader才起作用呢?
      

  3.   

    呵呵,有趣,如果是可以公开的,并且不考虑什么其它的security问题的话,可以用组播。但是一般的话,是用不到三方对话的。
      

  4.   

    同一个ServerSocket可以开多个Socket,你可以开四个线程,一方分两个,一个负责发,另一个负责收,每次收到信息的时候就激发另一方的收