黑马程序员技术交流社区

标题: 一个tcp上传文件的程序 出现了无法连接异常 [打印本页]

作者: 清心玉质    时间: 2015-10-6 13:11
标题: 一个tcp上传文件的程序 出现了无法连接异常
运行异常如下:
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at base.socketDemo.main(socketDemo.java:24)

代码如下:public class socketDemo {
/**
  * @param args
  * @throws IOException
  * @throws Exception
  */
public static void main(String[] args)  {
  // TODO Auto-generated method stub
  Socket s = null;
  try {
   s = new Socket("127.0.0.1",10003);
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
   BufferedReader br = null;
   try {
    br = new BufferedReader(new FileReader("a.txt"));
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   OutputStream ot = null;
   try {
    ot = s.getOutputStream();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   String line = null;
   
   try {
    while((line = br.readLine())!=null){
     
     ot.write(line.getBytes());
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   try {
    s.shutdownOutput();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   InputStream is = null;
   try {
    is = s.getInputStream();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   byte[] b = new byte[1024];
   int num = 0;
   try {
    num = is.read(b);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   System.out.println(new String(b,0,num));
   try {
    br.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   try {
    s.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
}
}

class Server{
public static void main(String[] args) throws Exception {

ServerSocket ss = new ServerSocket(10003);

Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress());
InputStream is = s.getInputStream();
FileOutputStream fot = new FileOutputStream("bb.txt");

byte[] buf=new byte[1024];
int num = 0;
while((num =is.read(buf))!=-1 ){
  fot.write(buf, 0, num);
}

OutputStream ops = s.getOutputStream();
ops.write("上传成功".getBytes());
ss.close();
s.close();
ops.close();
}

}

作者: 徐慧shanghai    时间: 2015-10-6 13:11
http://bbs.itheima.com/forum.php ... p;page=1#pid1912125

这边是我那天特意理的  socket 网络编程 你还是先看一下吧
弄清楚了字符串的传递再去弄文件吧
这个是两个程序,怎么能写在一个类里面 ?


服务端和 客户端都是要单独启动的 ,把这两个写到一个类里面 ,还传什么 ?用一个static 变量传递不就好了

还在里面又写了两个main方法 ,还非要在一个文件里面写两个类 一个文件写100个类也可以写,但是写了要起作用啊,还有不是每一个类都要有main方法的

作者: 年强    时间: 2015-10-6 15:18
选上太低了吧
作者: 清心玉质    时间: 2015-10-7 13:16
悬赏是误操作了,重在学习交流
作者: 徐慧shanghai    时间: 2015-10-10 12:55
看看连接的10003端口是否已经打开
如果打开关闭防火墙等可能阻拦连接的程序

首先打开 server 程序
再打开  client程序

你的程序我跑了,程序是没有问题,但是有一点你
class Server{
public static void main(String[] args) throws Exception {

这个也是另外一个程序 class 要另起一个类  Server 必须是public 的
异常最好在main方法里面抓住,不要扔出去
最后必须
保证 bb.txt 和a.txt存在
最好的方法就是直接写绝对路径,你如果文件都存在的话就没有问题了
如果没有这个文件,那么运行就读取文件的时候,会遇到异常导致server关闭,那么client自然也就连接异常了
如果没有学到那么深的地方最好还是从基础的开始看的
作者: 清心玉质    时间: 2015-10-11 13:47
徐慧shanghai 发表于 2015-10-10 12:55
看看连接的10003端口是否已经打开
如果打开关闭防火墙等可能阻拦连接的程序

一个类文件可以有多个类,但只能有一个public类,我记得视频里也是写在一起的,有什么问题?至于文件是否存在,这个我还真没看 谢谢指教 待我修改完再给分
作者: 徐慧shanghai    时间: 2015-10-12 09:04
清心玉质 发表于 2015-10-11 13:47
一个类文件可以有多个类,但只能有一个public类,我记得视频里也是写在一起的,有什么问题?至于文件是否 ...

看来你还是不太理解,这个必须是两个类,两个程序,你可以多看看视频里的介绍
一个是客户端程序,一个是服务端程序
一个类怎么能有两个  main方法呢?
作者: 清心玉质    时间: 2015-10-12 18:05
徐慧shanghai 发表于 2015-10-12 09:04
看来你还是不太理解,这个必须是两个类,两个程序,你可以多看看视频里的介绍
一个是客户端程序,一个是 ...

我说的是一各类文件里两个类
作者: 徐慧shanghai    时间: 2015-10-13 14:49
清心玉质 发表于 2015-10-12 18:05
我说的是一各类文件里两个类

那你怎么分开运行呢 ?亲 .....
作者: 清心玉质    时间: 2015-10-16 09:31
徐慧shanghai 发表于 2015-10-13 14:57
http://bbs.itheima.com/forum.php?mod=viewthread&tid=248406&page=1#pid1912125

这边是我那天特意理的   ...

不好意思 表达有误 是一个java文件中定义两个类 编译完了就形成两个class文件 分别运行就行了。谢谢你这么用心。




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