TCP/IP文件上传问题

r00_a2lBUR 2017-11-29 10:34:44
我在做一个文件上传的Demo,客户端:

import java.io.*;
import java.net.*;
public class Demo_Client {
public static void main(String[] args)
{
Socket vSocket=null;
DataOutputStream vDataOutputStream=null;
DataInputStream vDataInputStream=null;
String sFile = "D:\\temp\\5.rar";
FileInputStream vFileInputStream = null;
int iAvailable=0;
byte vByteS[]=null;
byte vByteSendS[]=new byte[1024];
try
{
vFileInputStream = new FileInputStream(sFile);
iAvailable = vFileInputStream.available();
vByteS = new byte[iAvailable];
vFileInputStream.read(vByteS);
vFileInputStream.close();
}
catch(Exception e)
{
System.out.println("读取文件错误:"+e);
}

int iGroupNumber = iAvailable/1024;
System.out.println(iAvailable+"/1024"+"="+iGroupNumber);
int iMode = iAvailable%1024;
if (iMode>0) iGroupNumber++;

try
{
vSocket = new Socket("192.168.8.122",8093);
vDataOutputStream = new DataOutputStream(vSocket.getOutputStream());
vDataInputStream = new DataInputStream(vSocket.getInputStream());
for (int i=0;i<iGroupNumber;i++)
{
int iStart = 1024*i;
int iLen = 1024;
if (i==iGroupNumber - 1)
{
iLen = iAvailable - iGroupNumber*1024 - 1024;
}
System.arraycopy(vByteS, iStart, vByteSendS, 0, iLen);
vDataOutputStream.write(vByteSendS);
System.out.println(i+"/"+iGroupNumber);
}
}
catch(Exception e)
{
System.out.println("上传文件错误:"+e);
}
}
}

服务器端:

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

import javax.crypto.spec.IvParameterSpec;
public class Demo_Server {
public static void main(String[] args)
{
ServerSocket vServerSocket=null;
Socket vSocket=null;
DataInputStream vDataInputStream;
int iAvailable = 5453837;
byte vByteS[] = new byte[iAvailable];
String sFile="D:\\temp\\5.rar";
FileOutputStream vFileOutputStream=null;
try
{
vServerSocket = new ServerSocket(8093);
for (int i=0;i<5327;i++)
{
int iLen=1024;
if (i==5326)
{
iLen=13;
}
byte vByteGetS[]=new byte[iLen];
int iPos=i*1024;
vSocket = vServerSocket.accept();
vDataInputStream = new DataInputStream(vSocket.getInputStream());
vDataInputStream.read(vByteGetS);
System.arraycopy(vByteGetS, 0, vByteS, iPos, iLen);
}
vFileOutputStream = new FileOutputStream(sFile);
vFileOutputStream.write(vByteS);
}
catch(Exception e)
{
System.out.println("发生异常:"+e);
}
}
}

上传时,卡在78那里就不动了:

是不是服务器端的端口数据满了?
...全文
111 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
r00_a2lBUR 2017-11-29
引用 1 楼 l359122505 的回复:
客户端每1024发一次,服务端代码没看懂,起码应该有个 while((int len=vDataInputStream.read(vByteGetS))>0){ vFileOutputStream.write(vByteGetS, 0, len); } 而且为什么服务端客户端操作的是同一个文件呢
Demo只上传一个文件,文件有5M多,分成1K1K上传。上传时,服务器把这些1K1K的数组组成一个大的数组,然后把这个大的数组一次性输出一个文件。就是卡在78K那里不动了。
  • 打赏
  • 举报
回复
客户端每1024发一次,服务端代码没看懂,起码应该有个 while((int len=vDataInputStream.read(vByteGetS))>0){ vFileOutputStream.write(vByteGetS, 0, len); } 而且为什么服务端客户端操作的是同一个文件呢
  • 打赏
  • 举报
回复
一大堆费代码。。。
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2017-11-29 10:34
社区公告
暂无公告