A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文彬 中级黑马   /  2014-3-10 12:53  /  1136 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这时毕老师在day26的网络编程的第11个视频,其中有:
/*
                 * 建立tcp服务端的思路:
                 * 1,创建服务端socket服务。通过ServerSocket对象。
                 * 2,服务端必须对外提供一个端口,否则客户端无法连接。
                 * 3,获取连接过来的客户端对象。
                 * 4,通过客户端对象获取socket流读取客户端发来的数据
                 *                 并打印在控制台上。
                 * 5,关闭资源。关客户端,关服务端。
                 */
               
                //1创建服务端对象。
                ServerSocket ss = new ServerSocket(10002);
               
                //2,获取连接过来的客户端对象。
                Socket s = ss.accept();//阻塞式.

                String ip = s.getInetAddress().getHostAddress();
老师说accept()是获取连接过来的客户端对象,服务端不需要创建新的socket对象,使用客户端的socket的流进行通信。接着ip就是所在的客户端ip。后来我查看了accept的源码
是这样的
  public Socket accept() throws IOException {
        if (isClosed())
            throw new SocketException("Socket is closed");
        if (!isBound())
            throw new SocketException("Socket is not bound yet");
        Socket s = new Socket((SocketImpl) null);
        implAccept(s);
        return s;
    }
明显新建了一个socket。想想也是,客户服务端中各自一个socket,应用程序与各自socket打交道,发出数据,不同主机利用网络进行传输,然后再各自socket中获取数据。我这理解正确吗?
这样与老师所说的不一样了.但是如果是新建的怎么又可以获取客户端的socket的信息呢?接着我就遐想了,难道是内部有赋值动作吗?
求牛人解答
               

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
你显然理解错了 接收的只是网络流 而不是具体的数据
回复 使用道具 举报
kira 发表于 2014-3-10 12:57
你显然理解错了 接收的只是网络流 而不是具体的数据

谢谢....但是网络中传输的是电信号,打了主机后(利用tcp/ip协议),由网卡转换成字节流,然后被封装成socket对象,流是对程序在本地对数据的一种操作工具
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马