我写了个发送文件的代码,放在本地测试是正确的,可是我放在互联网上的时候却出错了,根本发不过来
java.net.SocketException: Software caused connection abort: socket write error
报这样的错误
byte[] buf = new byte[1024];
while ((dis.read(buf)) != -1) { //每次向流里写入1024个字节
dos.write(buf, 0, buf.length);
}
在红色部分这个地方输出流写入报异常大家帮忙看看呀
java.net.SocketException: Software caused connection abort: socket write error
报这样的错误
byte[] buf = new byte[1024];
while ((dis.read(buf)) != -1) { //每次向流里写入1024个字节
dos.write(buf, 0, buf.length);
}
在红色部分这个地方输出流写入报异常大家帮忙看看呀
不一定能读满整个buf,比如整个长度不是1024的整数倍,最后一次肯定buf不满
另外可能的io问题,任何一次读取都不能保证完全读取1024字节内容因此后面 dos.write(buf, 0, buf.length);
就有问题了
byte[] buf=new byte[1024];
int bufSize=0;
while((bufSize=dis.read(bug))!=-1)
dos.write(buf,0,bufSize);
这个改变一下就能就收到部分数据,一点点。就是把发送端的这个改成8192,接收端改成568个字节读取,就能收到一部分数据,请问这样的通信怎么控制呀
数据包=数据长度(int)+有效数据/*
* 数据发送
*/
public static void writeBytes(java.io.DataOutputStream dos,byte[] bytes) throws IOException
{
dos.writeInt(bytes.length);
dos.write(bytes);
}
/*
* 数据接收
*/
public byte[] readBytes(java.io.DataInputStream dis) throws IOException
{
byte[] bytes=new byte[dis.readInt()];
dis.readFully(bytes);
return bytes;
}
上面问题是解决了,可是现在有新问题了。
就是我客户端第一次去连接的时候发送正确,然后关掉了客户端,服务器端一直监听。第二次连接的时候第二张图片就发送失败了,不知道什么原因了。我在第一次连接发送完后,把所有的东西都关掉了,除了ServerSocket。