java云服务开发学习之javaSocket知识点学习
Server端java代码要点:
用accept开启一个Socket
1InputStream inputStream = socket.getInputStream();while ((len = inputStream.read(bytes)) != -1) {3// 注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-84sb.append(new String(bytes, 0, len, "UTF-8"));5}
如果server端要返回数据,就再从socekt对象里get输出流,往输出流里写东西,就会传到对方那边
1serverSocket.setSoTimeout(6000);
SO_REUSEADDR 是否支持复用端口
即另一个ServerSocket还没有close时, 新的ServerSocket能否重用之前那个ServerSocket的端口。
1serverSocket.setReceiveBufferSize(130172);//把缓冲区的大小设置为128KB
Q: 客户端进行输出流输出时,如果执行了outputStream.close()后, 还需要执行socket.close()吗
A:
不需要。对于同一个socket,如果关闭了输出流比如(pw.close()),则与该输出流关联的socket也会关闭,所以一般不需要关闭输出流,当关闭socket的时候,输出流也会关闭。
因此如果有以下代码:
1// 与服务端建立连接2Socket socket = new Socket(host, port);3// 建立连接后获得输出流4OutputStream outputStream = socket.getOutputStream();5String message="你好 yiwangzhibujian";6socket.getOutputStream().write(message.getBytes("UTF-8"));
java中UDP的socket客户端建立时,不需要指定对端的ip和端口。
需要发送目的地的ip端口,在发送的DatagramPacket里去指定
(即我这个DatagramSocket可以用来发好多不同目的ip的DatagramPacket)
另一个区别是, tcp两边以流来传输数据, 但是udp以DatagramPacket来传递数据。
Q: MulticastSocket是什么?
A:
多点广播的socket实现。也是用DatagramPacket来传输数据,
类似于1个客户端可以把数据报发给好几个目的端。
multicastSocket.joinGroup(多播ip)
则该socket会加入到这个多播组中,
即假设环境中有4个MulticastSocket,分别为socketA、socketB、socketC、socketD
当socketA、socketB、socketC都通过joinGroup方法,加入了224.0.0.1这个多播ip
那么当socketA发送了某个DatagramPacket时,会同时发送给B和C, 但不会发给D。
Q: socketA会发送给自己吗?
A:
广播时发给自己那就是环回,loopback
区别于loopbackMode设置
如果执行过multicaseSocket.setLoopbackMode(true),则是禁用环回机制(这个别搞混,注意看参数名是disable,是否禁用)。
默认启用环回机制
参考资料:
https://blog.csdn.net/a78270528/article/details/80318571(这篇写得很棒)
https://blog.csdn.net/woshisap/article/details/6597413
https://blog.csdn.net/weixin_44618862/article/details/98480120
- 点赞
- 收藏
- 关注作者
评论(0)