【发布时间】:2011-05-10 03:48:37
【问题描述】:
我正在尝试使用 Java TCP 套接字构建文件服务器。当我尝试发送超过几 KB 的文件时,我不断收到错误消息。错误如下:
Exception in thread "main" java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at fileServer.TCPServer.main(TCPServer.java:193)
我正在创建这样的输出流:
OutputStream output = clientSocket.getOutputStream()
而错误源于这一行:
output.write(sendData, 0, sendData.length)
其中 sendData 是一个字节数组,我手工制作到一个商定的“协议”,它是 28 个标头字节以及文件。它出错的文件大约是 780kB,而 2kB 的文件可以完美运行。有什么想法吗?
编辑:一些关于我如何制作套接字的附加上下文。
Socket clientSocket = listenSocket.accept();
System.out.println("server is listening...");
DataInputStream input = new DataInputStream(clientSocket.getInputStream());
OutputStream output = clientSocket.getOutputStream();
//receive the request packet
//int nb = input.readInt();
System.out.println("Read Length " + "28");
byte[] sentence = new byte[28];
for(int i=0; i<28; i++){
sentence[i] = input.readByte();
}
这就是我发送数据的方式: sendData 是我为发送而构建的字节数组 tArray 是我正在处理到 sendData 以发送的文件的字节数组
for(int i = 0; i<filSize; i++){
//loads into the packet being built
//needed to minus 36 since all the header info
endData[i+36] = tArray[i];
}
System.out.println("send packet size: " + sendData.length);
System.out.print(sendData);
System.out.println("File size is: " + filSize);
int sendDataLength = sendData.length;
try{
output.write(sendData, 0, sendDataLength);
}catch (IOException e){
System.out.println("Error: " + e.getMessage());
}
clientSocket.close();
编辑 2: 我使用了try catch,现在得到了这个错误:软件导致连接中止:套接字写入错误
【问题讨论】: