BBS水木清华站∶精华区
发信人: stevenc (stevenc), 信区: Java
我在使用socket建立了网络通信后,使用DataInputStream
和DataOutputStream进行数据流的传送,client端能送出文件,
但server却不能正常收取全部文件,而只能接收到一部分文件,
大约只有9KB左右,其余的不知所踪,而且这9KB也只是文件的
前一部分。
这到底是怎么回事,还请大虾们多多指教。
小弟是位新手,如今是火烧眉毛,哪位大虾如果不嫌弃的话,
还请您直接把解决方法邮至chenqch@163.net。小弟这里上
清华比较困难,这里就先多谢了。
程序如下:
public class FileClientThread extends Thread
{
Socket miniClient;
DataOutputStream out1;
String ip;
FileInputStream infile;
byte read[];
int r;
boolean flag=true;
File file2;
//File file3;
//FileOutputStream outfile;
FileClientThread()
{
super("FileClient Thread");
}
public void run()
{
while(flag)
{
try
{
ip=edit1.getText();
miniClient=new Socket(ip,2002);
}
catch(Exception r)
{
richEdit3.setText"outputsocketerror"+r);
}
try
{
String filename=edit4.getText();
file2=new File("C:\\My Documents\\Visual Studio Projects\\xianliao",filen
ame);
infile=new FileInputStream(file2);
read=new byte[(int)file2.length()];
r=infile.read(read);
/*file3=new File("C:\\My Documents\\Visual Studio Projects\\xianliao","win
.gif");
outfile=new FileOutputStream(file3);
outfile.write(read);*/
out1=new DataOutputStream(new BufferedOutputStream(miniClient.getOutputStr
eam()));
out1.writeInt(read.length);
out1.write(read,0,read.length);
out1.writeBytes(file2.getName());
infile.close();
//outfile.close();
out1.close();
miniClient.close();
flag=false;
}
catch(Exception r)
{
richEdit3.setText("output error"+r);
}
}
}
}
public class FileServerThread extends Thread
{
DataInputStream in1;
byte[] b;
ServerSocket server1;
Socket client;
File file;
FileOutputStream outfile;
FileServerThread()
{
super("FileSocketServer Thread");
}
public void run()
{
button6.setEnabled(false);
try
{
server1=new ServerSocket(2002);
}
catch(Exception r)
{
richEdit3.setText("input error"+r);
}
try
{
client=server1.accept();
}
catch(Exception r)
{
richEdit3.setText("inputserver error"+r);
}
try
{
in1=new DataInputStream(client.getInputStream());
int len=in1.readInt();
b=new byte[len];
in1.read(b);
String filename=in1.readLine();
edit2.setText(filename);
file=new File("C:\\My Documents\\Visual Studio Projects\\xianliao",filena
me);
outfile=new FileOutputStream(file);
outfile.write(b);
/*String str=new String(b);
richEdit1.setText(str);*/
outfile.close();
in1.close();
client.close();
button6.setEnabled(true);
}
catch(Exception r)
{
richEdit3.setText("input error"+r);
}
try
{
server1.close();
}
catch(Exception r)
{
richEdit3.setText("server close error"+r);
}
}
}
发信人: SerialNo (小抠**乖乖肥猪), 信区: Java
我也遇到socks丢数据的现象
也是后面的数据有时候会丢失
但有时候会好
最后也没解决:(
发信人: Lover9 (无情), 信区: Java
我听人家说,socket的字节流模式只能保证字节的准确传输,
但不能保证写入socket的字节流能在一次读之后就能读出来,
因此如果你能知道写入socket的字节数之后,在读出的一方
用简单的while控制直到读出的字节数与写入的数相同时才终止
读入字节流。
如果 有兴趣,可以试一试。
发信人: stevenc (stevenc), 信区: Java
我在使用socket建立了网络通信后,使用DataInputStream
和DataOutputStream进行数据流的传送,client端能送出文件,
但server却不能正常收取全部文件,而只能接收到一部分文件,
大约只有9KB左右,其余的不知所踪,而且这9KB也只是文件的
前一部分。
这到底是怎么回事,还请大虾们多多指教。
小弟是位新手,如今是火烧眉毛,哪位大虾如果不嫌弃的话,
还请您直接把解决方法邮至chenqch@163.net。小弟这里上
清华比较困难,这里就先多谢了。
程序如下:
public class FileClientThread extends Thread
{
Socket miniClient;
DataOutputStream out1;
String ip;
FileInputStream infile;
byte read[];
int r;
boolean flag=true;
File file2;
//File file3;
//FileOutputStream outfile;
FileClientThread()
{
super("FileClient Thread");
}
public void run()
{
while(flag)
{
try
{
ip=edit1.getText();
miniClient=new Socket(ip,2002);
}
catch(Exception r)
{
richEdit3.setText"outputsocketerror"+r);
}
try
{
String filename=edit4.getText();
file2=new File("C:\\My Documents\\Visual Studio Projects\\xianliao",filen
ame);
infile=new FileInputStream(file2);
read=new byte[(int)file2.length()];
r=infile.read(read);
/*file3=new File("C:\\My Documents\\Visual Studio Projects\\xianliao","win
.gif");
outfile=new FileOutputStream(file3);
outfile.write(read);*/
out1=new DataOutputStream(new BufferedOutputStream(miniClient.getOutputStr
eam()));
out1.writeInt(read.length);
out1.write(read,0,read.length);
out1.writeBytes(file2.getName());
infile.close();
//outfile.close();
out1.close();
miniClient.close();
flag=false;
}
catch(Exception r)
{
richEdit3.setText("output error"+r);
}
}
}
}
public class FileServerThread extends Thread
{
DataInputStream in1;
byte[] b;
ServerSocket server1;
Socket client;
File file;
FileOutputStream outfile;
FileServerThread()
{
super("FileSocketServer Thread");
}
public void run()
{
button6.setEnabled(false);
try
{
server1=new ServerSocket(2002);
}
catch(Exception r)
{
richEdit3.setText("input error"+r);
}
try
{
client=server1.accept();
}
catch(Exception r)
{
richEdit3.setText("inputserver error"+r);
}
try
{
in1=new DataInputStream(client.getInputStream());
int len=in1.readInt();
b=new byte[len];
in1.read(b);
String filename=in1.readLine();
edit2.setText(filename);
file=new File("C:\\My Documents\\Visual Studio Projects\\xianliao",filena
me);
outfile=new FileOutputStream(file);
outfile.write(b);
/*String str=new String(b);
richEdit1.setText(str);*/
outfile.close();
in1.close();
client.close();
button6.setEnabled(true);
}
catch(Exception r)
{
richEdit3.setText("input error"+r);
}
try
{
server1.close();
}
catch(Exception r)
{
richEdit3.setText("server close error"+r);
}
}
}
发信人: SerialNo (小抠**乖乖肥猪), 信区: Java
我也遇到socks丢数据的现象
也是后面的数据有时候会丢失
但有时候会好
最后也没解决:(
发信人: Lover9 (无情), 信区: Java
我听人家说,socket的字节流模式只能保证字节的准确传输,
但不能保证写入socket的字节流能在一次读之后就能读出来,
因此如果你能知道写入socket的字节数之后,在读出的一方
用简单的while控制直到读出的字节数与写入的数相同时才终止
读入字节流。
如果 有兴趣,可以试一试。
BBS水木清华站∶精华区