黑马程序员技术交流社区
标题:
这TCP客户 服务端 之间 复制文件为什么不行?
[打印本页]
作者:
黄鸿达
时间:
2013-2-21 17:41
标题:
这TCP客户 服务端 之间 复制文件为什么不行?
本帖最后由 黄鸿达 于 2013-2-21 17:59 编辑
import java.io.*;
import java.net.*;
public class Send2 {
public static void main(String[] args) {
try {
Socket s=new Socket("192.168.1.102",12000);
BufferedInputStream br=
new BufferedInputStream(new FileInputStream("D:\\1.txt"));
BufferedOutputStream bw=
new BufferedOutputStream((s.getOutputStream()));
int len=0;
while((len=br.read())!=-1){
bw.write(len);
}
br.close();
bw.close();
} catch (Exception e) {
}
}
}
复制代码
import java.io.*;
import java.net.*;
public class Re2 {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(12000);
System.out.print("1");
Socket s=ss.accept();
System.out.print("2");
BufferedInputStream br=
new BufferedInputStream(s.getInputStream());
BufferedOutputStream bw=
new BufferedOutputStream(new FileOutputStream("D:\\2.txt"));
int len=0;
while((len=br.read())!=-1){
bw.write(len);
}
br.close();
bw.close();
} catch (Exception e) {
}
}
}
复制代码
尝试开启服务器端程序Re2 但是执行到打印1之后结束整个程序没有执行到下面的打印2程序,想不通
作者:
李挺
时间:
2013-2-21 17:58
服务端没有接受到文件传完的标志,那个while循环是没法结束的
你在send2的while循环后面加个s.shutdownOutput();试试
作者:
黄鸿达
时间:
2013-2-21 18:02
找到问题了,想到能发生异常,所以在catch语句那里加了e.toStirng
发现了bind exception 异常
原来serversocket创建时 端口被占用的问题
因为之前有个小程序也用了这个端口以至于被占用
后来改了serversocket的端口, 程序就顺利完成了
作者:
寇弘禄
时间:
2013-2-21 18:03
int len=0;
15. while((len=br.read())!=-1){
16. bw.write(len);
这里应该是bw.write((char)len)
17.
18. }
作者:
胥文
时间:
2013-2-21 18:25
两个问题:1,是你把文件写入流中之后没有flush();2,要判断一下d:\\2.txt是否存在
客户端:
public class Test22 {
/**
* @param args
* @throws Exception
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException, Exception {
// TODO Auto-generated method stub
Socket s = new Socket("192.168.0.6",10000);
BufferedInputStream bfri =
new BufferedInputStream(new FileInputStream("D:\\1.txt"));
BufferedOutputStream buo =
new BufferedOutputStream(s.getOutputStream());
int len;
while((len = bfri.read())!=-1)
{
buo.write(len);
buo.flush();
}
bfri.close();
buo.close();
}
}
服务端:
public class Test23 {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
BufferedInputStream bufi =
new BufferedInputStream(s.getInputStream());
File f = new File("d:\\2.txt");
if(!(f.exists()))
f.createNewFile();
BufferedOutputStream bufo =
new BufferedOutputStream(new FileOutputStream(f));
int len;
while((len = bufi.read())!=-1)
{
bufo.write(len);
bufo.flush();
}
}
}
作者:
罗海云
时间:
2013-2-21 20:28
可以用另一种方法.把BufferedOutputStream bw=new BufferedOutputStream((s.getOutputStream())); 改为PrintWriter对象.里面自动带刷新功能,, 就不会忘记刷新了.呵呵
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2