【发布时间】:2012-03-18 10:31:03
【问题描述】:
我正在制作一个网络文件传输系统,用于在 java 中通过网络传输任何类型的文件。尺寸也可以是任何种类。因此,我使用 UTF-8 协议来完成这项任务。
我提供了我制作的代码,但问题是有时文件会按原样传输,完全没有问题。但有时接收端只是跳过了几kb的数据,这实际上限制了mp3/video/image文件的正确打开。我认为问题出在缓冲区。我没有创建任何缓冲区,我认为现在可能对我有用。
如果有人能就该问题提供任何帮助,我将不胜感激,以便文件得到完全传输。
客户端:--->> 文件发送器
Socket clientsocket = new Socket(host,6789); // host contains the ip address of the remote server
DataOutputStream outtoserver = new DataOutputStream(clientsocket.getOutputStream());
try
{
int r=0;
FileInputStream fromFile1 = new FileInputStream(path); // "path" is the of the file being sent.
while(r!=-1)
{
r = fromFile1.read();
outtoserver.writeUTF(r+"");
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
clientsocket.close();
服务器端:--->> 文件接收器
ServerSocket welcome = new ServerSocket(6789);
Socket conn = welcome.accept();
try
{
String r1 = new String();
int r=0;
FileOutputStream toFile1 = new FileOutputStream(path); // "path" is the of the file being received.
BufferedOutputStream toFile= new BufferedOutputStream(toFile1);
DataInputStream recv = new DataInputStream(conn.getInputStream());
while(r!=-1)
{
r1 = recv.readUTF();
r = Integer.parseInt(r1);
toFile.write(r);
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
【问题讨论】:
-
如果您正在处理文件,为什么还要麻烦编码?只写字节。