黑马程序员技术交流社区

标题: 网络编程,一个原理没懂啊…… [打印本页]

作者: 毛羚杨    时间: 2014-2-23 15:58
标题: 网络编程,一个原理没懂啊……
  1. ServerSocket ss=new ServerSocket(2000);
  2.                
  3.                 Socket socket=ss.accept();
  4.                 String ip=socket.getInetAddress().getHostAddress();
  5.                
  6.                 //通过socket对象获取流,获取客户端的发送的数据
  7.                 InputStream in=socket.getInputStream();
  8.                
  9.                
  10.                 byte [] buf=new byte [1024];
  11.                 int len=in.read(buf);
  12.                
  13.                 String s=new String(buf,0,len);
  14.                 System.out.println(ip+":"+s);
  15.                 socket.close();
  16.                 ss.close();
复制代码
大家都知道Socket socket=ss.accept();,这个是创建服务端socket服务。通过ServerSocket对象,他这个获得客户端的socket服务是怎么获取的 他是通过反射机制获取的吗?还是普通的直接调用呢?

作者: 张东健    时间: 2014-2-23 20:01
监听机制,在web中有监听器这个概念的,这里服务端不是监听一个端口嘛,每个指定这个端口的请求都会被监听到,然后获取对象
作者: 毛羚杨    时间: 2014-2-23 22:02
张东健 发表于 2014-2-23 20:01
监听机制,在web中有监听器这个概念的,这里服务端不是监听一个端口嘛,每个指定这个端口的请求都会被监听 ...

监听机制听说过,难道这就是传说中的监听吗
作者: 张东健    时间: 2014-2-24 00:18
tomcat不就是一个服务器嘛,默认端口8080,你本地访问时不是每次都是 localhost:8080嘛,你看是不是访问了指定端口,它是不是监听了指定端口
作者: flying    时间: 2014-2-24 13:24
客户端建立socket服务的时候指定主机 和端口
服务器监听指定端口   
accept就是获取客户端的 socket对象  
如:客户端A和客户端C都连接服务器  B
服务器B只有获取A的socket才能与客户端A通信 同时也保证服务器B向B发送的数据被A接受 而不是客户端C
作者: qqwwdr    时间: 2014-2-24 13:47
本帖最后由 qqwwdr 于 2014-2-24 13:54 编辑
flying 发表于 2014-2-24 13:24
客户端建立socket服务的时候指定主机 和端口
服务器监听指定端口   
accept就是获取客户端的 socket对象   ...

毕老师的视频里也是这么讲的,
查看源码:

    public Socket accept() throws IOException {
        if (isClosed())
            throw new SocketException("Socket is closed");
        if (!isBound())
            throw new SocketException("Socket is not bound yet");
        //通过系统默认类型的 SocketImpl 创建未连接套接字
        Socket s = new Socket((SocketImpl) null);
        //ServerSocket 的子类使用此方法重写 accept() 以返回它们自己的套接字子类
        implAccept(s);
        return s;
    }





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2