//客户端(MyClient.java):import java.io.*;
import java.net.*;
public class MyClient
{
  public static void main(String args[])
  {
    Socket client;
    PrintStream psc;
    
    System.out.println("连接成功");
    while(true)
    {
    try
    {
      client = new Socket("localhost",1234);
      psc = new PrintStream(client.getOutputStream());
      BufferedReader bfc = new BufferedReader(new InputStreamReader(System.in));
  psc.println(bfc.readLine());
  
  BufferedReader brc = new BufferedReader(new InputStreamReader(client.getInputStream()));
      System.out.println("Server said:"+brc.readLine());
      client.close();
      brc.close();
    }
    catch(IOException e)
    {
      System.out.println(e);
    }
    }
}
}服务器端(MyServer.java):
import java.io.*;
import java.net.*;
public class MyServer
{
  public static void main(String args[])
  {
    ServerSocket server;
    PrintStream pss;
   
      while(true)
      {
       try{
      
      
      server = new ServerSocket(1234);
       Socket sk = server.accept(); 
      BufferedReader brs = new BufferedReader(new InputStreamReader(sk.getInputStream()));
      System.out.println("Client said:"+brs.readLine());
      
      pss = new PrintStream(sk.getOutputStream());
      BufferedReader bfs = new BufferedReader(new InputStreamReader(System.in));
  pss.println(bfs.readLine());
      brs.close();
      bfs.close();
      server.close();
    }
    catch(IOException e)
    {
      System.out.println(e);
    }
    
    }
}
}以上分别是我的两个JAVA程序,实现的是客户与服务器之间进行对话,程序可以运行,但是互相输入两次信息之后,服务器端就会显示“地址被占用的错误提示”(大家可以试一下),请大家帮我解决一下这个问题,谢谢!!

解决方案 »

  1.   

    client = new Socket("localhost",1234);
    放到死循环里面 当然地址被占用了
      

  2.   


    import java.io.*;
    import java.net.*;
    public class MyServer
    {
      public static void main(String args[])
      {
        ServerSocket server=null;
        BufferedReader brs =null;BufferedReader bfs=null;
        PrintStream pss;
        try {
    server = new ServerSocket(1234);
    } catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
          while(true)
          {
           try{
          Socket sk = server.accept(); 
           brs = new BufferedReader(new InputStreamReader(sk.getInputStream()));
          System.out.println("Client said:"+brs.readLine());
          
          pss = new PrintStream(sk.getOutputStream());
          bfs = new BufferedReader(new InputStreamReader(System.in));
      pss.println(bfs.readLine());
          //brs.close();
          //bfs.close();
          //server.close();
        }
        catch(IOException e)
        {
          System.out.println(e);
        }
        
        }
        
    }
    }import java.io.*;
    import java.net.*;
    public class MyClient
    {
      public static void main(String args[])
      {
        Socket client;
        PrintStream psc;
        BufferedReader brc;
        System.out.println("连接成功");
        while(true)
        {
        try
        {
          client = new Socket("localhost",1234);
          psc = new PrintStream(client.getOutputStream());
          BufferedReader bfc = new BufferedReader(new InputStreamReader(System.in));
      psc.println(bfc.readLine());
      
        brc = new BufferedReader(new InputStreamReader(client.getInputStream()));
          System.out.println("Server said:"+brc.readLine());
          //client.close();
          //brc.close();
        }
        catch(IOException e)
        {
          System.out.println(e);
        }
        }
    }
    }
      

  3.   

    Socket sk = server.accept(); 
           brs = new BufferedReader(new InputStreamReader(sk.getInputStream()));
          System.out.println("Client said:"+brs.readLine());//-----在这里卡到了那边不发消息过来程序是走不下去的 
          
          pss = new PrintStream(sk.getOutputStream());
          bfs = new BufferedReader(new InputStreamReader(System.in));
      

  4.   

    把 brs = new BufferedReader(new InputStreamReader(sk.getInputStream()));
          System.out.println("Client said:"+brs.readLine());//-----在这里卡到了那边不发消息过来程序是走不下去的 
    放到一个专读的线程中去,那样,它怎么卡怎么阻塞都不会影响主线程了。
    import java.io.*;
    import java.net.*;
    public class MyClient
    {
    private static Socket client=null;
        private static PrintStream psc=null;
        private static BufferedReader brc=null;
      public static void main(String args[])
      {
       boolean flag=false;
        System.out.println("连接成功");
        while(true)
        {
        try
        {
          client = new Socket("localhost",1234);
          if (!flag) {
           flag=true;
           MyThread t=new MyThread();
           t.start();
          }
          brc = new BufferedReader(new InputStreamReader(client.getInputStream()));
          System.out.println("Server said:"+brc.readLine());
          
          //client.close();
          //brc.close();
        }
        catch(IOException e)
        {
          System.out.println(e);
        }
        }
      }
      class MyThread extends Thread{
    public void run(){
    psc = new PrintStream(client.getOutputStream());
    while(true)
           BufferedReader bfc = new BufferedReader(new InputStreamReader(System.in));
       psc.println(bfc.readLine());
       }
    }
    }