日期:2014-05-20  浏览次数:20805 次

关于一个ServerSocket的问题!高手帮帮!
我这几天在看孙鑫讲题的一个服务器和客户端发信息的一个课程!

里面有一个程序是这样的:
class   Server   extends   Thread{
  private   Socket   s;
  public   Server(Socket   s){
      this.s=s;//1.他这样表试的意思是什么?
    }
    public   void   run(){
    //2.这里是Thread的默认方法,可是为什么要用呢.我却不是很明白
        try{
            OutputStream   ou   =   s.getOutputStream();
            InputStream   in   =   s.getInputStream();
            ou.write( "用户你好 ".getBytes());
            byte[]   b   =   new   byte[100];
            in.read(b);
            System.out.println(new   String(b,   0,   b.length));
            s.close();
            ou.close();
            in.close();
        }catch(Exception   ce){
            ce.printStackTrace();
        }
    }
    public   static   void   main(String[]   args)   {
        if   (args.length   >   0)
            serve();
        else
            client();
    }

    public   static   void   serve()   {
        try   {
            ServerSocket   ss   =   new   ServerSocket(5000);
            while(true){
                Socket   s=ss.accept();
                new   Server(s).start();//3.还有这里的声明
            }
        }catch   (Exception   ce)   {
            ce.printStackTrace();
        }
    }

上面三个问题,真是把我搞晕了.我看了一天的Thread讲解,可是孙鑫讲得很死板,我理解起来困难!
希望有高手指点!

------解决方案--------------------
1 this.s=s;表示把方法形参的Socket类型的s赋值给该类的Socket类型的s,由于变量名相同,所以类里的s用this修饰下。
2 Thread的run方法表示运行该线程的时候调用该run方法
3 new Server(s).start(),前部分new Server(s)表示new了一个对象,然后调用该对象的start方法。start方法就是执行线程,即执行线程里的run代码段!
------解决方案--------------------
应该先看erve()方法
在主函数中 如果有参数的话就调用erve()方法
新建一个服务器socket把这个socket传给Server的一个实例 就是new Server(s)
这个socket的引用就给了 this.s 在run方法中使用这个socket
这个Server继承了Thread 类
当然就要重写run方法