看别人的文章觉得咋恁别扭,不是我想的那种,搞了几天,终于有点成就感,散点分,同时高手再指点指点。1、receiveServer.javaimport java.io.*;
import java.net.*;
import java.util.*;
public class receiveServer
{
  final int RECEIVE_PORT=9090; //该服务器的端口号
  public receiveServer()
  {
    ListenThread listen=new ListenThread();
    listen.start();
  }
  public static void main(String args[])
  {
    new receiveServer();
  } 
  
  class ListenThread extends Thread  //***  本类<异步>完成对服务器端口的侦听
  {
    ServerSocket rServer=null; //ServerSocket的实例
    Socket request=null;    //用户请求的套接字
    Thread buildThread=null;  //*** Thread?
    public ListenThread()
    {
      try
      {
        rServer = new ServerSocket(RECEIVE_PORT); //初始化ServerSocket
        System.out.println("Listen Thread is ready! Listen Port: " + RECEIVE_PORT);
        //this.start();  //*** 放到类外面控制更灵活
      }
      catch(IOException e)
      {
        System.out.println(e.getMessage());
      }      
    }
    public void run()
    {
      try
      {
        while (true) 
        { 
          request = rServer.accept(); ////等待用户请求并接收客户机连接请求
          buildThread = new buildSocketThread(request); //生成buildSocketThread的实例
          buildThread.start(); //启动serverThread线程
        }
      }
      catch(IOException e)
      {
        System.out.println(e.getMessage());
      }  
    }
  }  class buildSocketThread extends Thread  //***  本类完成与客户端请求建立一个socket连接,并接收客户端的指令
  {
    Socket clientRequest; //用户连接的通信套接字
    BufferedReader input; 
    PrintWriter output; 
    public buildSocketThread(Socket s) 
    {
      System.out.println("one connected"); //***  输出接收事件,要不然服务器老是象死了一样没反应!!
      //
      this.clientRequest=s; //接收receiveServer传来的套接字
      InputStreamReader reader;
      OutputStreamWriter writer;
      try
      { 
        reader=new InputStreamReader(clientRequest.getInputStream());//初始化输入、输出流
        writer=new OutputStreamWriter(clientRequest.getOutputStream());
        input=new BufferedReader(reader);
        output=new PrintWriter(writer,true);
      }
      catch(IOException e)
      {
        System.out.println(e.getMessage());
      }
      output.println("Welcome to the server!"); //客户机连接欢迎词
      output.println("Now is: "+new java.util.Date()+" "+ "Port:"+clientRequest.getLocalPort());
      output.println("What can I do for you?");
    }
    public void run()
    { 
      String command=null; //用户指令
      String str=null;
      boolean done=false;
      while(!done)
      {      
        try
        {
          str=input.readLine().trim(); //接收客户机信息
          if(str=="")   //*** 防止客户端socket断开,下面执行空指针
            ; 
          else
          {
            System.out.println("received message: " + str);  //就没有执行到这句,难道没收到客户端的信息?
            output.println("server response: " + str);   //为什么客户端收不到信息!!!?  
            output.flush();
          }
          
        }
        catch(IOException e){System.out.println(e.getMessage());}
      } 
      try
      {
        clientRequest.close(); //关闭套接字
      }
      catch(IOException e){System.out.println(e.getMessage());}
      command=null;
    }    //void run
  }      //buildSocketThread
}

解决方案 »

  1.   

    2、Untitled1.java
    import java.net.*;
    import java.io.*;public class Untitled1
    {
      Socket cliSck;
      BufferedReader input;  //*** 定义全局socket输入输出流,便于检测是否有数据过来
      PrintWriter output;
      
      boolean CheckReceive;  //***  定义是否检测socket接收数据
      Thread checkRecv;      //***  检测socket线程实例  BufferedReader line;  public Untitled1()
      {
        try
        {
          cliSck=new Socket("192.168.0.7",9090);  
          input=new BufferedReader(new InputStreamReader(cliSck.getInputStream()));
          output=new PrintWriter(cliSck.getOutputStream());
          System.out.println("启动socket数据检测...");
          checkRecv=new CheckRecvThread();  //***  启动检测socket接收数据线程
          CheckReceive=true;
          checkRecv.start();
          System.out.println("启动客户端指令输入...");
          System.out.println("客户端帮助命令: help ");
          BufferedReader line=new BufferedReader(new InputStreamReader(System.in));  //***  接收客户端指令
          String str=null;
          str=line.readLine().trim().toUpperCase();
          boolean done=false;
          while(!done)//
          {
            if(str.equals("QUIT"))
            {
              done=true;
              //  
              System.out.println("Bye!Bye!");
              line.close();
              output.close();
              input.close();
              cliSck.close();
            }
            else if(str.equals("HELP"))
            {
              System.out.println("目前支持的命令有:");
              System.out.println("quit:");
              System.out.println("  close this program!"); 
            }
            else   //非本程序命令,向服务器端发送消息
            {
               System.out.println("send message:" + str);
               output.println(str);  //给服务器发送一条消息,显示服务器回应信息在run中
               output.flush();             
            }
            str=line.readLine().trim().toUpperCase();            //要放在if外  并大写转换
          }
        }
        catch(UnknownHostException U){}
        catch(IOException I){}
      }
      public  static void main(String argus[])
      {
        new Untitled1();
      }  class CheckRecvThread extends Thread //*** Socket接收数据监测
      {
        public void run()  
        {
          try
          {
            while(CheckReceive)
            {
              String recv=null;
              recv=input.readLine().trim();
              if(recv.equals(""))
                ;
              else
                System.out.println(recv);
              //
            }    
          }
          catch(IOException i){}
        }
      }
    }