`
百合不是茶
  • 浏览: 359095 次
社区版块
存档分类
最新评论

Connection reset 连接被重置的解决方法

阅读更多

流是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:您好

 

1
1
分享到:
评论

相关推荐

    connection_reset.rar

    解决oracle数据库发生'Connection reset by peer' or 'Connection reset'的错误 这边的数据库连接是kettle自带的h2数据库,只要有kettle就有这个数据库,目录位于data-integration\samples\db\,连接方式是 ...

    ConnectionResetError(解决方案).md

    ConnectionResetError是网络编程中常见的一种错误,它通常发生在尝试在连接被重置或断开时进行数据发送或接收操作时。解决此问题的方法多样,主要依赖于引发错误的具体原因。可能的解决方案包括重新连接、使用更稳定...

    造成连接已重置ERR-CONNECTION-RESET的原因是

    为什么会显示连接已重置ERR_CONNECTION_RESET

    ConnectionResetError.md

    5. 选择更稳定的网络库或连接方式也是解决ConnectionResetError的一种方法。例如,可以尝试使用其他的网络库如urllib或socket,或者更换成更稳定的网络连接方式,如使用有线连接代替无线连接。 6. 如果在使用代理...

    错误 101 (net--ERR_CONNECTION_RESET).docx

    错误 101 (net--ERR_CONNECTION_RESET).docx

    java中的connection reset 异常处理分析

    在Java编程中,"connection reset"异常通常表示网络连接在数据传输过程中突然中断,这可能是由多种原因导致的。在本文中,我们将深入探讨这种异常的处理和分析,特别是与Java中的Socket通信相关的方面。 首先,`...

    [分享]解决Istio中遇到的间歇性连接重置的问题1

    通过上述方法,可以逐步排查并解决Istio中遇到的间歇性连接重置问题。在实践中,可能需要结合多种手段并进行多次迭代,才能找到最佳的解决方案。务必记录和分享排查过程,以便后续类似问题的快速解决。

    ERR_CONNECTION_RESET(解决方案).md

    ERR_CONNECTION_RESET是一个常见的网络错误,其解决方法涵盖了从检查网络连接到服务器状态的各个方面。针对不同的问题成因,必须采取不同的解决策略。通过调整超时设置、实现重试机制以及确保服务器状态正常运行,...

    PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法

    最近在使用curl中遇到CURL ERROR: Recv failure: Connection reset by peer的报错提示,现把解决方法与大家共享,希望对大家有所帮助。 我们经常用curl来访问web站点,web站点目前主要分为http和https两种协议,...

    Win7环境下Apache连接MySQL提示连接已重置的解决办法

    1.能正常访问php和html类型文件,但是访问项目文件时老是连接被重置,后来总结是数据库的问题,就写测试用例测试php能否成功调用数据库。 <?php echo "mysql"; $mysql_conf = array( 'host' => '127.0.0.1', ...

    test-connection-reset

    此存储库用于在启用HTTP保持活动状态时测试“连接重置错误” 。 有关详细说明,请参考 。 在本地重现此问题的步骤: 设定环境 npm install 启动服务器 npm start 在单独的终端中运行测试客户端 npm run client 接收...

    SQL Server 连接字符串.docx

    * Connection Reset(连接重置):表示一个连接在从连接池中被移除时是否被重置。 * Current Language(当前语言):SQL Server 语言记录的名称。 * Data Source / Server /Address /Addr /Network Address...

    MS_SQL_Server_数据库连接字符串详解

    `Connection Lifetime` 控制连接在池中存活的最长时间,`Max Pool Size` 和 `Min Pool Size` 分别限制了连接池的最大和最小连接数,`Pooling` 开启连接池功能,`Connection Reset` 决定是否在获取连接时重置连接状态...

    Win7宽带连接错误711的5种解决方法.docx

    **Win7 宽带连接错误 711 解决方法详解** 当Windows 7用户遇到“宽带连接错误711”时,这通常意味着系统中某些服务或设置出现了问题,导致无法正常建立网络连接。以下是五种可能的解决方法: **方法一:启动相关...

    博客园大牛CareSon博客合集

    当调用Connection.Close()方法关闭连接时,连接并非真的关闭,而是被返回到连接池中。需要注意的是,连接池并不对所有连接都进行回收,如果检测到连接已经损坏或者长时间没有使用,连接池会自动移除这些连接。 在...

    基于SQL Server.Net的数据库连接管理.pdf

    此外,还应该考虑连接池的生命期(ConnectionLifeTime),以及是否对返回池中的连接进行重置(ConnectionReset)和管理事务(Enlist)。正确配置这些参数,有助于保证应用程序能够高效地使用数据库连接,并在必要时...

Global site tag (gtag.js) - Google Analytics