JAVASE connection reset 异常 劳烦大神帮我看看

langmanweixin 2016-10-17 07:55:54

import java.io.*;
import java.net.*;

class kehu
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.0.104",9888);

BufferedReader bufr =
new BufferedReader(new FileReader("haha.java"));



PrintWriter out = new PrintWriter(s.getOutputStream(),true);


String line = null;
while((line=bufr.readLine())!=null)
{
out.println(line);
}

s.shutdownOutput();


/*BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

String str = bufIn.readLine();
System.out.println(str);*/

}
}
class fuwu
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(9888);

Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"....connected");


BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

PrintWriter out = new PrintWriter(new FileWriter("server.txt"),true);

String line = null;

while((line=bufIn.readLine())!=null)
{
out.println(line);
}

/*PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
pw.println("上传成功");*/


}
}


小弟昨晚,用电脑运行了这段代码,把注释掉的部分也取消注释了,能正常运行。 可是到了今天我运行同一段程序,去报出了
connection reset异常 , 只有注销上面已经注销的代码,才能正常运行。 请大神们帮我看看,为什么昨天能用今天就不能用了, 是我电脑的硬件除了问题吗? 今天被这问题折磨了一下午,很着急......所有分都给了
...全文
501 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
按楼上说的,检查一下ip
萧乡月夜 2016-12-01
  • 打赏
  • 举报
回复
建议楼主首先需要了解一下计算机通讯的基本概念(IP,端口等)。 代码解释:
Socket s = new Socket("192.168.0.104",9888);
这句代码的意思是尝试连接IP地址为192.168.0.104机器的9888端口。 如果这个IP的机器存在并且这台机器开放了9888端口,这个连接就会被成功建立,然后就可以进行下面的通讯行为了。 而注释掉的部分
ServerSocket ss = new ServerSocket(9888);
意思是在本机的开放一个端口为9888的服务。 原因分析: 第一种可能(原理): 并不确认为何楼主选用了192.168.0.104这个IP,猜测是根据本机当前的IP地址设置的,由于楼主的PC连接的是路由器,IP是在楼主启动机器的时候由路由器通过DHCP协议动态分配的,因此两次分配的IP会有很大几率不同。这导致了楼主在第二天运行的时候本机IP不是192.168.0.104,可能是192.168.0.101~192.168.0.254中的任意一个值(具体取决于当前路由器已经分配了多少个IP),因此在该行代码调用时,发现IP为192.168.0.104的机器不存在或该IP地址的机器(这时这个IP没有分配给本机,而是分配给了其他连接路由器的设备,如手机、IPAD等)没有开放9888端口,连接就会被拒绝。 第二种可能(误操作): 猜测楼主在第一天时程序运行了超过两遍。 第一天: 第一遍:没有注释掉服务器端代码,这时运行服务器端开放了9888端口。 第二遍:注释掉服务器端代码,此时服务器端代码仍旧在运行,所以9888端口仍处于开放状态,执行客户端仍旧成功。 第二天: 在两天之间重起了机器,9888端口恢复成开机初始状态(关闭状态)。 服务器端代码仍处于注释状态,直接运行客户端,由于9888端口处于关闭状态,连接被拒绝。
0萌萌哒0 2016-11-30
  • 打赏
  • 举报
回复
1.检查你的ip地址是192.168.1.104吗?换成localhost或者127.0.0.1是不是能好呢 2.记得先开服务器后开客户端哦 3.如果服务器开不起来(运行报Exception)多半是端口被占用了,解决方案:关闭之前没来得及关掉的服务端;或换个端口。
肃穆丶 2016-10-18
  • 打赏
  • 举报
回复
java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error)。该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的.. 网上看到的。。要不你重启试试
langmanweixin 2016-10-17
  • 打赏
  • 举报
回复
来个大神 帮帮我吧
langmanweixin 2016-10-17
  • 打赏
  • 举报
回复
现在的情况是,只能由 客户端向服务器端发送, 若由服务器端向客户端发送就报错

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧