A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大漠孤烟 中级黑马   /  2014-5-2 23:38  /  2272 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima.net;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class UploadClient {

        /**
         * @param args
         * @throws IOException
         * @throws UnknownHostException
         */
        public static void main(String[] args) throws UnknownHostException, IOException {
               
                System.out.println("请注意,我要上传文件啦。。。。。");
                //创建文件类对象
                File fl=new File("D:\\log.txt");
               
                System.out.println(fl.exists());
               
            //1
                Socket sk=new  Socket("192.168.1.100",10008);
               
                //2.缓存流,提供效率
               
                BufferedReader bufr=new BufferedReader(new FileReader(fl));
               
                PrintWriter out=new PrintWriter(sk.getOutputStream(),true);
               
                String line=null;
               
                while((line=bufr.readLine())!=null){
                        out.print(line);
                }
               
                //3告诉服务器写完啦
                sk.shutdownOutput();
                out.print("哥们我传完了,检查一下");

               
                //4.
                BufferedReader bf=new BufferedReader(new InputStreamReader(sk.getInputStream()));
               
                String str=bf.readLine();
                System.out.print(str);
               
                bufr.close();
                sk.close();
        }

}
打印结果:
请注意,我要上传文件啦。。。。。
true
Exception in thread "main" java.net.ConnectException: Connection timed out: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
        at java.net.Socket.connect(Socket.java:579)
        at java.net.Socket.connect(Socket.java:528)
        at java.net.Socket.<init>(Socket.java:425)
        at java.net.Socket.<init>(Socket.java:208)
        at com.itheima.net.UploadClient.main(UploadClient.java:30)

最近在学习毕老师的网络编程,蛮有意思的,结果老实报错,不知道是什么原因

4 个回复

倒序浏览
咋没看到服务器哇。
回复 使用道具 举报
我觉得你这代码有小小的冗余了,你判断文件是否存在也没做处理啊,都没做处理干嘛还要判断,还有就是你使用PrintWriter为什么不使用println将数据写入Socket流呢?还使用sk.shutdownOutput();是不是有点多此一举的感觉呢?
从异常的输出信息可以知道这是连接超时,发生这种现象可能是防火墙的问题,试试把防火墙关闭。在运行程序。当然我觉得最可能还是因为你创建的connection太多了,导致连接超时,把你创建的connection关闭。在运行你的程序,先试试下面这个,总之就是这两个的原因。
回复 使用道具 举报
没有连接到ServerSocket,TCP连接必须要有服务端,因为他们的连接要进行3次握手.
回复 使用道具 举报
package com.itheima.net;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadServer {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {

         System.out.println("来吧,等你上传服务端。。。。。");
         
         ServerSocket ss=new ServerSocket(10008);
         
         //2.获取到客户端对象
         
         Socket sk=ss.accept();
         System.out.print(sk.getInetAddress().getHostAddress()+"......成功连接");
         
         BufferedReader bufr=new BufferedReader(new InputStreamReader(sk.getInputStream()));
         
         BufferedWriter bufw=new BufferedWriter(new FileWriter("D:\\server.txt"));
         
         String line=null;
         
         while((line=bufr.readLine())!=null){
                 
                 bufw.write(line);
                 bufw.newLine();
                // bufw.close();
                 bufw.flush();
         }
         
         //
         PrintWriter out=new PrintWriter(sk.getOutputStream(),true);
                    out.print("恭喜您,上传成功啦!");
                    
                    bufw.close();
                    
                   ss.close();
                   sk.close();
        }

}
服务端打印:  难道真的向楼上说的是防火墙的原因连接超时,我是按照视频敲的。。。
请注意,我要上传文件啦。。。。。
true
Exception in thread "main" java.net.ConnectException: Connection timed out: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
        at java.net.Socket.connect(Socket.java:579)
        at java.net.Socket.connect(Socket.java:528)
        at java.net.Socket.<init>(Socket.java:425)
        at java.net.Socket.<init>(Socket.java:208)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马