流是java的核心部分,,昨天在做android服务器连接服务器的时候出了问题,就将代码放到java中执行,结果还是一样连接被重置
被重置的代码如下;
客户端代码;
package 通信软件服务器; import java.io.BufferedWriter; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; //客户端 public class SocketDemo { //private static String text="您好"; public static void main(String[] args) { //Connection reset 连接被重置 try{ //创建套接字的连接对象 Socket socket = new Socket("127.0.0.1",9090); OutputStream os = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bdw = new BufferedWriter(osw); // String text="您好"; bdw.write(text, 0, text.length()); bdw.flush(); }catch(Exception e){ e.printStackTrace(); } } }
服务器代码;
package 通信软件服务器; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Demo { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(9090); System.out.println("等待客户端连接"); Socket socket = server.accept(); System.out.println(socket.getRemoteSocketAddress() + "连接上服务器"); InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader bis = new BufferedReader(isr); String line = bis.readLine(); System.out.println("line:" + line); } catch (Exception e) { e.printStackTrace(); } } }
客户端连接服务器会出现以下结果;
等待客户端连接 /127.0.0.1:53373连接上服务器 java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at 通信软件服务器.Demo.main(Demo.java:24)
原因分析:
客户端在连接到服务器之后就已经被虚拟机回收了
解决思路;
1,在客户端中关闭流
客户端在连接到服务器之后,流必须发送字符串之后才能被关闭和回收
bdw.close();
2,在发送的字符串穿件分割符;
在发送字符串的时候添加分隔符,告诉服务器一行的结束位置; \r\n是换行符
String text="您好\r\n";
修改后的代码;
服务器
package 通信软件服务器; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Demo { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(9090); System.out.println("等待客户端连接"); Socket socket = server.accept(); System.out.println(socket.getRemoteSocketAddress() + "连接上服务器"); InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader bis = new BufferedReader(isr); // int a=bis.read(); // System.out.println(a); //readLine()必须要有结束的标志\r\n String line = bis.readLine(); System.out.println("line:" + line); } catch (Exception e) { e.printStackTrace(); } } }
客户端;
package 通信软件服务器; import java.io.BufferedWriter; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; public class SocketDemo { //private static String text="您好"; public static void main(String[] args) { //Connection reset 连接被重置 try{ //创建套接字的连接对象 Socket socket = new Socket("127.0.0.1",9090); OutputStream os = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bdw = new BufferedWriter(osw); // String text="您好\n\r"; bdw.write(text, 0, text.length()); bdw.flush(); bdw.close(); }catch(Exception e){ e.printStackTrace(); } } }
执行结果:
等待客户端连接 /127.0.0.1:53633连接上服务器 line:您好
相关推荐
解决oracle数据库发生'Connection reset by peer' or 'Connection reset'的错误 这边的数据库连接是kettle自带的h2数据库,只要有kettle就有这个数据库,目录位于data-integration\samples\db\,连接方式是 ...
为什么会显示连接已重置ERR_CONNECTION_RESET
错误 101 (net--ERR_CONNECTION_RESET).docx
在Java编程中,"connection reset"异常通常表示网络连接在数据传输过程中突然中断,这可能是由多种原因导致的。在本文中,我们将深入探讨这种异常的处理和分析,特别是与Java中的Socket通信相关的方面。 首先,`...
通过上述方法,可以逐步排查并解决Istio中遇到的间歇性连接重置问题。在实践中,可能需要结合多种手段并进行多次迭代,才能找到最佳的解决方案。务必记录和分享排查过程,以便后续类似问题的快速解决。
最近在使用curl中遇到CURL ERROR: Recv failure: Connection reset by peer的报错提示,现把解决方法与大家共享,希望对大家有所帮助。 我们经常用curl来访问web站点,web站点目前主要分为http和https两种协议,...
1.能正常访问php和html类型文件,但是访问项目文件时老是连接被重置,后来总结是数据库的问题,就写测试用例测试php能否成功调用数据库。 <?php echo "mysql"; $mysql_conf = array( 'host' => '127.0.0.1', ...
此存储库用于在启用HTTP保持活动状态时测试“连接重置错误” 。 有关详细说明,请参考 。 在本地重现此问题的步骤: 设定环境 npm install 启动服务器 npm start 在单独的终端中运行测试客户端 npm run client 接收...
* Connection Reset(连接重置):表示一个连接在从连接池中被移除时是否被重置。 * Current Language(当前语言):SQL Server 语言记录的名称。 * Data Source / Server /Address /Addr /Network Address...
`Connection Lifetime` 控制连接在池中存活的最长时间,`Max Pool Size` 和 `Min Pool Size` 分别限制了连接池的最大和最小连接数,`Pooling` 开启连接池功能,`Connection Reset` 决定是否在获取连接时重置连接状态...
**Win7 宽带连接错误 711 解决方法详解** 当Windows 7用户遇到“宽带连接错误711”时,这通常意味着系统中某些服务或设置出现了问题,导致无法正常建立网络连接。以下是五种可能的解决方法: **方法一:启动相关...
当调用Connection.Close()方法关闭连接时,连接并非真的关闭,而是被返回到连接池中。需要注意的是,连接池并不对所有连接都进行回收,如果检测到连接已经损坏或者长时间没有使用,连接池会自动移除这些连接。 在...
此外,还应该考虑连接池的生命期(ConnectionLifeTime),以及是否对返回池中的连接进行重置(ConnectionReset)和管理事务(Enlist)。正确配置这些参数,有助于保证应用程序能够高效地使用数据库连接,并在必要时...
在配置Hibernate与c3p0连接池时,可能会遇到诸如`ConnectionReset! Broken pipe!`等异常情况。具体表现为:当应用程序尝试执行某些数据库操作时,由于网络问题或其他原因导致连接中断,进而抛出异常。例如: ``` ...
_socket常见错误代码解析 Socket错误代码是网络编程中常见的一种错误类型,它们通常是由于网络连接、数据传输、 socket操作等过程中...了解这些错误代码的含义和解决方法可以帮助开发者更好地处理网络编程中的错误。
2. **Connection Reset**:默认为`true`,意味着当从连接池中移除连接时,数据库连接会重置到初始状态。这样做的目的是确保下次使用时连接处于干净的状态,但可能会增加一定的开销。 3. **Enlist**:默认为`true`,...
在进行django数据库连接模块解析及简单长连接改造方法的讨论前,首先需了解django框架中数据库连接管理的基本原理。Django使用ORM(对象关系映射)来与数据库进行交互,这允许开发者使用Python代码来操作数据库,而...
### Windows 7 旗舰版“宽带连接错误711”的根本原因及解决方法 #### 错误概述 在使用Windows 7 旗舰版操作系统时,部分用户遇到了“宽带连接错误711”,这一问题通常表现为无法正常建立网络连接,影响用户的正常...
“Connection reset by peer”通常出现在网络连接被远程主机意外中断或重置的情况下。这可能是因为下载速度过慢导致超时。 **解决方案:** 1. **调整连接超时时间:** - 在LoadRunner的“运行时设置”窗口中,转至...
### IE浏览器不能打开网页链接的解决方法 #### 一、问题背景 在使用IE浏览器时,部分用户可能会遇到无法正常打开网页链接的情况。这可能是由于系统注册表中的某些DLL文件未正确注册或某些服务设置不当导致的问题。...