黑马程序员技术交流社区

标题: 关于TCP复制文件的一个小异常 [打印本页]

作者: 贾浩田    时间: 2014-8-14 10:58
标题: 关于TCP复制文件的一个小异常
为何我自己写的通过TCP服务来进行文件复制过程,运行时会出现socketException呢?API中也没有发现那个方法会抛出这个异常,求高手帮忙
作者: ddewym123    时间: 2014-8-14 11:02
你代码都不贴出来,别人怎么帮你
作者: 贾浩田    时间: 2014-8-14 11:48
class Demo96
{
        public static void main(String[] args) throws Exception
        {
                client();
                System.out.println("Hello World!");
        }
        public static void client() throws Exception{
                Socket s = new Socket("192.168.0.106", 1236);
                File file = new File("f://1.txt");
                if(file.exists() == false){
                        return;
                }
                //数据源
                BufferedReader br = new BufferedReader(new FileReader(file));
                //数据目的
                BufferedWriter bw_socket =
                        new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                String line = null;
                while((line = br.readLine()) != null){
                        bw_socket.write(line);
                        bw_socket.newLine();
                        bw_socket.flush();
                }
                //接收来自服务端反馈
                BufferedReader br_socket =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
                String str = br_socket.readLine();
                System.out.println(str);

                s.close();
                br.close();
               
        }
}
class Demo97
{
        public static void main(String[] args) throws Exception
        {
                server();
                System.out.println("Hello World!");
        }
        public static void server()throws Exception {
                ServerSocket ss = new ServerSocket(1236);
                Socket s = ss.accept();
                System.out.println("连接的客户端ip: "+s.getInetAddress().getHostAddress());
                //File file = new File("f://1.txt");
                //数据源
                BufferedReader in_socket =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
                //数据目的
                BufferedWriter bw =
                        new BufferedWriter(new FileWriter("f://1(1).txt"));
                String line = null;
                //进行写数据
                while((line = in_socket.readLine()) != null){
                        System.out.println(line);
                        bw.write(line);
                        bw.newLine();
                        bw.flush();
                }
                //反馈给客户端
                BufferedWriter bw_socket =
                        new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                bw_socket.write("upload success!!");
                //关闭客户端和复制文件的输出流
                ss.close();
                s.close();


        }
}
作者: yqj    时间: 2014-8-14 15:55
在我电脑上测试多次都能同,lz把ServerSocket();端口调大些试试,1236端口比较小可能已经被占用,另外为了在client端读到服务端的反馈信息需要在client端数据发送完后加上输出结束标志(s.shutdownOutput(););同时服务器端的 反馈给客户端信息写完后要刷新,不然客户端会收到null(测试出来的)
能力有限希望能解决楼主的问题!
作者: 贾浩田    时间: 2014-8-14 23:00
yqj 发表于 2014-8-14 15:55
在我电脑上测试多次都能同,lz把ServerSocket();端口调大些试试,1236端口比较小可能已经被占用,另外为了 ...

:):)谢谢,:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2