首先我一下几个提出问题:稍后再做出解答。
问题一:A如果仅仅将输入流关闭(inA.close()),对A与B之间的连接是否有影响?
A能否再次获得输入流(inA = socketA.getInputStream())?
是否A还可以发送数据,因为其输出流没有关闭?
问题二:A如果仅仅将输出流关闭呢?
问题三:A如果将输入输出流都关闭,socket还有效吗?
如果无效是否可以省略socket.close().
经过测试,发现
1. inA.close();
socket.getOutputStream();
这都出现异常。
2. inA.close();
inA = socket.getInputStream();
经过上述两条,可以得出结论:
1.输入流或者输出流只要一者关闭,两个流以及socket都不可以用了。
2.最好的做法是,要关闭则一起关闭:
inA.close();
outA.close();
socket.close();
最后需要注意的是:
socket相关的流的读是阻塞的,也就是说。A不要输入流关闭前时,要考虑B端的输出流是否还
需 要写。否者,B端一直等待A端接收,而A端却接受不了,B一直阻塞。
同样,A端将输出流关闭了,B端却一直在读,却读不到内容,一直阻塞。
上述两种情况会跳出一大堆异常。
首先我一下几个提出问题:稍后再做出解答。 问题一:A如果仅仅将输入流关闭(inA.close()),对A与B之间的连接是否有影响? A能否再次获得输入流(inA = socketA.getInputStream())? 是否A还可以发送数据,因为其输出流没有关闭? 问题二:A如果仅仅将
java
实现
socket
网络编程
服务端使用Server
Socket
绑定IP和端口,使用Accept监听端口是否有客户端发送连接请求,一旦有客户端发送连接请求,
服务端就回送连接信息,正式建立连接。Server端和Client端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的
Socket
,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
1、创建
Socket
;
2、打开连接到
Socket
的输入/出
流
;
3、按照一定的协议对
Socket
进行读/写操作;
4、
关闭
Socket
。
服务器端:
实现一个简单的Hello服务,打印输出客户端IP地址到控制台,对任何连接的客户端都会发送一串字符(Hello,
Java
Socket
)然后
关闭
与客户端连接。等待下一个客户端的连接请求到来。
实现一个简单的
Socket
连接到Hello服务器端,接受服务器端发送过来的字节数据打印并输出内容到控制台。
关键技巧:
由于
JAVA
中提供非常多的输入与输出
流
API,导致很多初学者接触
JAVA
SOCKET
编程时,由于对网络字节通信的本质缺乏了解,直接一个readline()去接受
Socket
字节
流
。但是由于发送一方并没有发送/r/n导致一直无
java
简易聊天程序,使用TCP
socket
套接字安全协议,对象
流
二进制序列化传输。 简易局域网聊天程序,暂时只能发送文本消息。 此程序既是
socket
服务器又可以作为
socket
客户端。由于鄙人写的
关闭
服务和断开连接还存在一些
问题
和不足,请不要点击断开和
关闭
按钮。。
若想断开连接、
关闭
服务重连,请直接叉掉程序再启动即可(客户端和服务端均是如此)
使用命令:
java
-jar chartDemo.jar 运行程序。
由
Socket
和
Socket
Server创建出来的输入输出
流
如果
关闭
的话,那么
socket
和
Socket
Server也会
关闭
但是有showdownInput()和showdownOutput()方法来改变
流
的
流
向
注意,
关闭
之后,就不能再使用该
流
,只能使用另外一种
流
,也就是如果
关闭
了输入
流
,就只能使用输出
流
,反之亦然
可能有小伙伴会疑惑,如果想使用一个
Socket
和Server
Socket
进行交替输入输出操作怎么办?
socket
编程是基于http的编程,一次请求就是一个
socket
,下一次请求就再创
基于
Socket
的
java
网络编程,
Socket
通讯的过程
Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的
Socket
,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1) 创建
Socket
;
(2) 打开连接到
Socket
的输入/出
流
;
(3) 按照一定的协议对
Socket
进行读/写操作;
(4)
关闭
Socket
.(在实际应用中,并未使用到显示的close,虽然很多文章都推荐如此,不过在我的程序中,可能因为程序本身比较简单,要求不高,所以并未造成什么影响。
昨天写了一个读取配置文件的方法,打开了InputStream 输入
流
读取了配置文件信息。 在本地测试tomcat时,没发现
问题
。
讲模块打包放到linux服务器上部署的Weblogic服务上, 重启Weblogic服务,发现重启时间比平时多了很长时间,但也可以重启,
重启后,环境会有卡死现象。。。。
修改代码,
关闭
输入
流
。。。 环境恢复正常。。。
多个文件在一次循环中写出到本地,但是输入输出
流
未
关闭
导致总有一个文件提示被占用
在没有这两句代码的时候,因为
流
未被
关闭
,所以多文件的时候,总有一个文件显示被
流
占用了
使用完
流
之后,一定要马上
关闭
,而不是等finally来
关闭
,它只是做最后的检查而已.
os.close();
in.close(); for (int i = 0; i < fileOfBills.size
在使用
socket
进行全双工通信时,原本以为输入
流
和输出
流
是分开
关闭
的,然而不管
关闭
哪个都会直接
关闭
socket
;可以使用
socket
.shutdownInput()和
socket
.shutdownOutput()
使用InputStream
进入bebug模式,在执行到 inputStream.close()后进入
Socket
InputStream的close()方法,而这个方法是
关闭
socket
流
执行reader.close()后,最后也是执行
Socket
InputStream的close(
在
Java
中,如果您的
Socket
没有被正确
关闭
,可能会导致连接被断开。如果您不
关闭
Socket
,它可能会一直处于打开状态,因此可能会出现一些
问题
,如资源泄漏、连接过期或连接池满了等
问题
。
此外,如果您的代码在客户端和服务器端都没有
关闭
Socket
,那么它们可能会被保持在打开状态,这可能会导致资源浪费和性能
问题
。
为了避免这种情况,建议在使用
Socket
后始终
关闭
它,以确保正确释放资源并避免潜在的连接
问题
。可以使用以下代码
关闭
Socket
:
```
java
socket
.close();
这将
关闭
与
Socket
相关联的
流
并释放与之相关的资源。在使用
Socket
时,请确保始终在使用完毕后
关闭
它。