当前位置: 代码迷 >> Java相关 >> TCP的文件传输程序的问题!
  详细解决方案

TCP的文件传输程序的问题!

热度:345   发布时间:2007-06-24 18:49:58.0
TCP的文件传输程序的问题!

一个基于TCP的文件传输程序.每次传输的数据不能超过100字节,即超过100字节就将文件分割再发送!
红色字部分不怎么动得实现!

是应该一个一个字节计算到了100然后发送还是有什么别的方法!!!!!

搜索更多相关的解决方案: TCP  文件  传输  字节  

----------------解决方案--------------------------------------------------------
.....
我有个问题:TCP本来就是被用来设计成可靠传输的,所以非常适合传输大文件而很少出错。

只有UDP才需要考虑这样的问题。


你可以首先获取文件的长度。
然后再进行判断

----------------解决方案--------------------------------------------------------

没办法啊!作业!我也觉的好郁闷!老是写不切实际的题目!


----------------解决方案--------------------------------------------------------

自己先得到文件的总长度,然后再分割成100字节一块的,发过去

不过,分了和没分一样,对方依然是一大串的字节


----------------解决方案--------------------------------------------------------

再分割成100字节一块的
就这一点不明白!


----------------解决方案--------------------------------------------------------
比如说你的文件是12345个字节

你先传1-100个字节

然后再传 101-200字节。这样传啊
----------------解决方案--------------------------------------------------------

fis=new FileInputStream("data.txt");
int sum=fis.available();
int i=0;
while(i<sum){
if((sum-i) >100){
byte s[]=new byte[100];
fis.read(s,0,100);
String str=new String(s);
System.out.println(str);
}
else
{
byte s1[]=new byte[100];
fis.read(s1,0,(sum-i));
String str=new String(s1);
System.out.println(str);

}
i+=100;

}

分块那部分我是这样实现的!不知可不可以!


----------------解决方案--------------------------------------------------------

服务端:
public class t10_5_s extends JFrame {
private ServerSocket server;
private Socket sock;
private DataInputStream dis;
private DataOutputStream dos;
private FileInputStream fis;
private PrintWriter pw;

public t10_5_s()
{

try {
server=new ServerSocket(8888);
sock=server.accept() ;
dos=new DataOutputStream (sock.getOutputStream() );
dos.writeUTF( "ok!");
dis=new DataInputStream (sock.getInputStream() );
pw=new PrintWriter (new FileWriter("d1.txt"));
String str=null;
while(true){

str=dis.readUTF();
System.out.println(str);
pw.print(str);

}
} catch (IOException e1) {
e1.printStackTrace();
}finally{
pw.close();
try {
sock.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
public static void main(String[] args) {
new t10_5_s();
}
}
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323)
at java.io.DataInputStream.readUTF(DataInputStream.java:572)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
at t10_5_s.<init>(t10_5_s.java:44)
at t10_5_s.main(t10_5_s.java:65)

客户端:
public class t10_5_c extends JFrame{
private Socket sock;
private DataInputStream dis;
private DataOutputStream dos;
private FileOutputStream fos;
private FileInputStream fis;
public t10_5_c()
{

try {
sock=new Socket("127.0.0.1",8888);
dis=new DataInputStream (sock.getInputStream() );
System.out.println(dis.readUTF());
fis=new FileInputStream("data.txt");
dos=new DataOutputStream(sock.getOutputStream());

int sum=fis.available();
int i=0;
while(i<sum){
if((sum-i) >100){
byte s[]=new byte[100];
fis.read(s,0,100);
String str=new String(s);
System.out.println(str);
dos.writeUTF( str);
}


else
{
byte s1[]=new byte[sum-i];
fis.read(s1,0,(sum-i));
String str=new String(s1);
System.out.println(str);
dos.writeUTF( str);

}
i+=100;

}



} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally{try {
sock.close();
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}}

}

public static void main(String[] args) {
new t10_5_c();
}
}
红色部分是错误!想了好久没搞不懂!


----------------解决方案--------------------------------------------------------
  相关解决方案