虽然是一些基础的问题,不知道你会不会》》  不会?。 天哪! 你是怎么活过来的?
1.  内部类为何无法在静态方法里实例化?2. HTTP协议是面向无连接的协议, socket一连接传输完后,就会关闭,  那HTTP实现原理是什么?是程序, 还是底层实现的?。 如果是底层实现的,我就没必要追究了, 但我觉得应该不是底层的实现, 怎样来理解这个协议呢(用java, 你也可以写一个表示的例子来模拟,不一定要实现它的功能, 但是能说清楚问题就可以),因为对计算机协议这个东西一直存在着疑惑,而且也找不到能理解的方式,  
3.阻塞式 --  关于阻塞式的实现,我一直不知道是怎样的实现方式; 我所理解的实现方式有这么一种:boolean connected = true;
while(connected) {
   ...........
   if(boolean) {    //这个boolean 由另起一线程中检测,或通过观察者模式 等等!!!来改变其值,退出死循环!
    break;
}
}

解决方案 »

  1.   

    你问的问题还真不好回答。
    你的第一个问题我觉得你问的是不是有问题。
    第二个嘛。Http协议是无状态的协议。当客户端向服务器发送一个请求时。服务器对请求进行
    处理并把结果返回给客房端。同时给客户端一个ID,当客户再一次发送一个请求时,ID会一同
    发送过去。服务器通过ID来判断是不是新用户。是否新分配一个ID给客户端。当然还有超时
    的问题了。这就是不用我多说了。
    第三个问题,我想用多线程的Lock、wait等方法去实现吧。
      

  2.   

    1.  内部类为何无法在静态方法里实例化?
    =========================
    因为静态方法先于内部类加载!
    2.关于协议的理解:
    =========================
    我就打个最简单的比方吧:
    假设有一台服务器S,和3台客户机C1,C2,C3;接着我们想通过S用于中转来自客户机的消息的接收与转发以便实现各客户机两两聊天。那么我们可以先自定义消息的格式,以希望该格式帮助我们实现上述功能。楼主既然接触过socket,那就更好办了。假设我们事先定义的服务器的端口号为X(发送)和Y(接收),客户机的端口号为Y(发送)和X(接收)[刚好和服务器的相反]!试想想,如果C1想和C2聊天,那么是否可以把自己的IP和C2的IP都告诉S,而这些IP信息都可定义在消息中,这样服务器就知道源IP是C1的IP,目的IP是C2的IP,而服务器要做的仅仅是将从C1接收到的消息转发到C2。这时,服务器直接从X号端口发送数据到C2的X号端口。C2给C1发送消息的情况则与上述内容相似!同理:C3要想和C1或C2,或者说这三台客户机任意二台想实现相互通信,那么发送和接收的方法同样类似!如果,我们事先并没有将源IP和目的IP加到消息中,那么服务器如何去得知接收来的消息将该从何转发?然而这消息中包含的源IP和目的IP我们事先也在服务器端进行了相关处理:C1发送了一条消息(内容为"哈哈")加上了源和目的的IP地址则成为("192.168.1.1/192.168.1.2/哈哈")到S,S“看到”第2个IP地址则为目的地址,那它就知道该把此消息转发到C2。当然了,关于消息的格式及处理方式完全可以由你自己去定义和实现。这也就是一种简单的协议!!
    3.关于阻塞
    ----------------
    个人认为阻塞其实也就是一种有条件的等待。只有当另一件事的行为产生进而引起了触发!
    比如
    ServerSocket ss=new ServerSocket(2534);
    ss.accept();
    在accept的时候,就是一直在监听等待客户机的连接,一旦有客户机的连接请求,马上进行响应!
    还有你平时写一个程序如果用到了System.in的时候,如果一直没有输入,那程序则一时进行等待,直到你输入了内容并回车时才进行响应,接着以执行后续步骤。这个阻塞嘛应该和线程间的通信有关。比如ss在accept的时候,主线程便一直在监测2534号端口是否有数据过来,如果有,马上移交CPU资源使用权;System.in时呢则由主线程监控缓冲区内是否有数据写入并且看到第一个回车符则说明完成一次输入!!