首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JAVA: connection reset by peer:socket write error

2012-01-24 
JAVA求助: connection reset by peer:socket write error是这样的 我的client端程序如下(节选)FileInputSt

JAVA求助: connection reset by peer:socket write error
是这样的 我的client端程序如下(节选)
FileInputStream fis = new FileInputStream(fileName);
  int data;
  while ( -1 != ( data = fis.read( ) ) )
  {
  os.write( data );
  }  
   
  System.out.println( "send file success!!" );
   
在client端设备上执行后 只从文件发送了一个字节 发送到server端后,程序便出错退出了(server收到了此字节)
出错在: os.write( data ); 这一行 好象是超时后报错 
printStackTrace()错误提示如下 :
java.net:SocketException: connection reset by peer :socket write error
......................
......................

奇怪的是 :
  程序退出后 网络居然不通了??!! 需要拔下网线 再插上网线等一会网络才能ping通 真郁闷呀!!!

各位前辈 多指教 谁遇到过这种问题  
主要两个问题
1:程序怎么会执行不下去 只发了一个字节就connection reset by peer :socket write error中断??
2:网络居然不通了??!!


[解决办法]
异常很常见 但是不是说一个异常对应一个问题(或者说是对应一个问题 但是这个问题的发生原因有很多)
描述运行环境之前最好先让读者看到这个程序可能会出现问题的地方(如果你自己不能确认的话 则贴下代码比较好些)

这类问题自己调试的方式是 可以先拿一个能跑的通的例子与自己基于某个业务开发的功能做比较 如果实在看不出什么区别 再拿出来提问


下面发一些代码 这些代码并不是我开发的 却是我修改的 当时的发帖者因为找不出原因至少贴了的代码

Java code
package net.test;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;public class ServerTester implements Runnable {    @Override    public void run() {        ServerSocket server = null;        try {            server = new ServerSocket(5000);                        BufferedReader in = null;            BufferedWriter out = null;            while (true) {                Socket socket = server.accept();                                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));                out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));                                while (true) {                    out.write("hello to client\r\n");                    out.write("i am server\r\n");                    out.write("bye\r\n");                    out.flush();                    if (in.readLine().trim().equals("exit")) {                        break;                    }                }                socket.close();                System.err.println("第一次请求结束...按照你这个代码同时只能接受一个请求...");            }        } catch (IOException e) {            e.printStackTrace();        } finally {            if (server != null) {                try {                    server.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}
[解决办法]
Java code
package net.test;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;import java.net.UnknownHostException;public class SocketTester implements Runnable {    @Override    public void run() {        Socket socket = null;        BufferedReader in = null;        BufferedWriter out = null;        try {            socket = new Socket("localhost", 5000);            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));            out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));            String line = null;            while ((line = in.readLine()) != null) {                if (line.trim().equals("bye")) {                    break;                } else {                    System.out.println(line);                }            }            out.write("exit\r\n");            out.flush();        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (socket != null) {                try {                    socket.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }} 


[解决办法]
新型号的电脑--- 估计是千兆网卡吧,改成100M试试。
[解决办法]
有两种方法,大致如下:
一种:
1.双击电脑桌面右下角那两个小电脑的图标,选“属性”,再点“配置”-“高级;
2.找到“Media Type”,,通过右边的下拉菜单选择速度即可。
二种:
1.右击“我的电脑”--“属性”--“硬件”--“设备管理器”;
2.在“设备管理器”找到“网络适配器”选项,点击“+”号,右键点击您的网卡,在网卡属性对话框中点击“高级”--“Link Speed/Duplex Mode”,下拉菜单中选择网卡速度。

注:网卡是“Media Type” 或 “Link Speed/Duplex Mode” 或其它,视具体情况而定。

热点排行