在使用socket通信时,我们可能会注意到这样一个现象:
客户端通过新建的Socket对象获取输入流,读取服务器端传输给自己的内容。
Socket socket = new Socket("127.0.0.1", 8086); InputStream is = socket.getInputStream(); is.read()
服务器端通过accept方法获取Socket对象,然后再获取输入流,读取客户端传输给自己的内容。
ServerSocket serverSocket = new ServerSocket(8086); Socket client = null; while (true){ client = serverSocket.accept(); InputStream is = client.getInputStream(); is.read() }
这点就让我很疑惑,为什么同一个InputStream对象,在服务器端可以读取客户端传输内容,在客户端可以读取服务器端传输内容。后来经过验证发现,服务器端accept得到的socket对象和客户端新建的socket对象其实并不是同一个,这样就造成了二者各自获得流对象都是不同的,也就解释了上面的疑问。放入代码证明:
import java.io.IOException; import java.io.InputStream; import java.net.Socket; public class SocketClient { public static InputStream is; public static void main(String[] args) throws IOException { Socket socket = new Socket("127.0.0.1", 8086); is = socket.getInputStream(); } }
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8086); Socket client = null; while (true){ client = serverSocket.accept(); System.out.println(client.getInputStream()==SocketClient.is); } } }
可能这个问题很低级,知识还是不牢靠啊。
标签:java,socket,服务器端,通信,Java,client,import,Socket From: https://www.cnblogs.com/rockdow/p/17533887.html