cuiping43
cuiping43
采纳率4.2%
2016-06-03 03:40 阅读 1.7k

请问B/S结构中socket调用getInputStream方法建立从哪里到哪里的链接

比如我服务器需要向客户端传递数据,用打印流,传递参数sockt client=server.accept();
然后调用client.getOutputStream()传递参数,我可以理解为这个打印流是从服务器内存流向客户机内存
然后用BufferedReader去读取客户机内存的数据,也用client.getInputStream()传递参数

那么问题来了,为什么我客户端编写程序的时候,需要从服务器读取数据或者传递数据的时候同样地使用打印流和缓冲字符流的时候,传递的参数也是client.get()方法呢,难道客户机自己从自己内存读?为什么此处不是调用serversocket.get()方法呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • qq_43478653 qq_43478653 2021-03-09 12:29
    • 对于客户端Socket来说,getOutputStream()的说明如下:

    > Returns an output stream for this socket.

    因为Socket是通过Server的地址和端口创建的,所以this socket指的应该是Server的端口。

    • 对于服务器accept()得到的Socket来说,对accept()的说明如下:

    > Listens for a connection to be made to this socket and accepts it.

    意思是:监听连接在此socket上的连接,那意思是指客户机所运行的socket?我们通过accept().getRemoteSocketAddress()得到的是客户机socket所运行的ip和端口,通过getLocalSocketAddress()得到的是服务器socket所运行的ip和端口。

    由此,是不是可以推断,accept得到的socket还是建立在服务器上,只是关联了客户端?那么这样的话,accept()得到的socket().getInputStream()和getOutputStream()也是从服务器的端口读或者写的了?

    点赞 评论 复制链接分享
  • sdjkjsdh sdjkjsdh 2016-06-03 04:10

    这应该是javase中的网络通信那部分吧?
    首先用socket通信时候,服务器和客户端都要创建socket,服务器端用serversocket方法创建,客户端用socket方法创建。创建完之后,要在服务端的程序调用serversocket.accept()方法,这个方法用来接收服务端socket的连接请求。
    假设要从客户端向服务器发送数据:
    首先要在客户端调用socket的getOutputStream方法建立一个输出流,同时的在服务端调用serversocket的getInputStream方法建立一个输入流。在客户端向输出流里写数据,在输入端可以向调用输入流的read()方法把数据读出来就可以了。
    如果还有不懂可以做一下我上传的那个java聊天系统的小项目。我没有代码了只有视频,需要的话问我要也可以

    点赞 评论 复制链接分享

相关推荐