【问题标题】:Socket and ServerSocket communication unclearSocket和ServerSocket通信不清楚
【发布时间】:2020-06-09 07:27:55
【问题描述】:

我希望有人能澄清一个我认为我有的误解。我正在阅读 Java 上的套接字编程,但并不真正了解事物的实际流程。以下是我对以下场景的两种可能解释。

Client

  1. 创建套接字实例Socket s = new Socket("server ip", 9999);

Server

  1. 为接受通信而创建的 ServerSocket ServerSocket ss = new ServerSocket(9999);
  2. 等待通讯Socket sss = ss.accept();


服务器程序接受后,图表会是什么样子?

红色箭头代表最终的通信流

服务器接受客户端后的连接会是这样吗? (客户端与服务器创建的套接字通信,而不是服务器套接字)

或者图表看起来像这样? (客户端通过 serversocket 与服务器保持通信。服务器通过接受连接时创建的套接字进行通信。)

【问题讨论】:

    标签: java sockets networking server client


    【解决方案1】:

    套接字是两个主机(客户端和服务器)之间连接的抽象。 建立连接后,客户端和服务器主机从套接字获取输入和输出流,并使用这些流相互发送数据。 (阅读更多详情here)。

    此图可能对您有所帮助。

    在客户端:

    • Socket socket = new Socket("server ip", 9999);

    这会通过网络建立连接。

    • InputStream in = socket.getInputStream();

    连接建立后,从套接字连接获取输入流以读取数据。

    • OutputStream out = socket.getOutputStream(); 使用套接字连接的输出流写入数据。

    在服务器上:

    • ServerSocket ss = new ServerSocket(9999);

    启动一个监听 TCP 套接字(服务器套接字),它绑定到已知的本地端口,监听并接受来自客户端的连接。

    • Socket socket = ss.accept();

    阻塞当前线程,直到客户端连接,并返回已接受连接的已连接 Socket。注意,这里它返回与客户端相同类型的 java.net.Socket。 与客户端类似,服务端可以通过套接字使用OutputStreamInputStream来读写数据。

    更多详情请参考here

    【讨论】:

    猜你喜欢
    • 2019-09-24
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多