黑马程序员技术交流社区

标题: 关于网络编程时的异常问题。 [打印本页]

作者: 弗人    时间: 2015-10-10 15:24
标题: 关于网络编程时的异常问题。
客户端代码:
package cn.itcast_13;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class UploadClient {
public static void main(String[] args) throws IOException {
  // 创建客户端Socket对象
  Socket s = new Socket("192.168.15.63", 19191);
  // 封装图片文件
  BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
    "b.png"));
  // 封装通道内的流
  BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
  byte[] bys = new byte[1024];
  int len = 0;
  while ((len = bis.read(bys)) != -1) {
   bos.write(bys, 0, len);
   bos.flush();
  }
  
  s.shutdownOutput();
  // 读取反馈
  InputStream is = s.getInputStream();
  byte[] bys2 = new byte[1024];
  int len2 = is.read(bys2);
  String client = new String(bys2, 0, len2);
  System.out.println(client);
  // 释放资源
  bis.close();
  s.close();
}
}


客户端代码为:
package cn.itcast_13;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {
public static void main(String[] args) throws IOException {
  // 创建服务器Socket对象
  ServerSocket ss = new ServerSocket(19191);
  // 监听客户端连接
  Socket s = ss.accept();
  // 封装通道内流
  BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
  // 封装图片文件
  BufferedOutputStream bos = new BufferedOutputStream(
    new FileOutputStream("科目四报名.png"));
  byte[] bys = new byte[1024];
  int len = 0;
  while ((len = bis.read(bys)) != -1) {
   bos.write(bys, 0, len);
   bos.flush();
  }
  // 给一个反馈
  OutputStream os = s.getOutputStream();
  os.write("图片上传成功".getBytes());
  bos.close();
  s.close();
}
}

代码和上课的老师代码一样的,但是为什么会报这个错呢?
Exception in thread "main" java.net.ConnectException: Connection timed out: connect

作者: 徐慧shanghai    时间: 2015-10-10 16:17
你需要先运行服务Server 程序
再运行client 去链接
作者: 弗人    时间: 2015-10-10 17:54
徐慧shanghai 发表于 2015-10-10 16:17
你需要先运行服务Server 程序
再运行client 去链接

我是这样操作的额,关键是第一次成功了,再后面就这样了{:3_52:}
作者: 徐慧shanghai    时间: 2015-10-12 09:06
弗人 发表于 2015-10-10 17:54
我是这样操作的额,关键是第一次成功了,再后面就这样了

public static void main(String[] args) throws IOException {
  // 创建服务器Socket对象
  ServerSocket ss = new ServerSocket(19191);
  // 监听客户端连接
  Socket s = ss.accept();
  // 封装通道内流
  BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
  // 封装图片文件
  BufferedOutputStream bos = new BufferedOutputStream(
    new FileOutputStream("科目四报名.png"));
  byte[] bys = new byte[1024];
  int len = 0;
  while ((len = bis.read(bys)) != -1) {
   bos.write(bys, 0, len);
   bos.flush();
  }
  // 给一个反馈
  OutputStream os = s.getOutputStream();
  os.write("图片上传成功".getBytes());
  bos.close();
  s.close();
}
}

你看一下你的服务端的程序
成功了一次之后就会关闭socket,所以服务器就关闭了,第二次自然就失败了




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