//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的信息呢?接着我就遐想了,难道是内部有赋值动作吗?
求牛人解答 作者: kira 时间: 2014-3-10 12:57
你显然理解错了 接收的只是网络流 而不是具体的数据 作者: 胡文彬 时间: 2014-3-10 13:19