黑马程序员技术交流社区

标题: TCP上传文件问题 [打印本页]

作者: 无奈的年华ˊ    时间: 2014-4-22 13:12
标题: TCP上传文件问题
本帖最后由 无奈的年华ˊ 于 2014-4-22 14:04 编辑

哪位哥们帮忙看看,为什么老是报 java.net.SocketException: Connection reset 异常  ?????!

客户端
  1. import java.io.BufferedReader;
  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;

  8. public class SocketTest {

  9.         public static void main(String[] args) throws UnknownHostException, IOException {
  10.                 /*
  11.                  * 通过客户端读取本地文件发送给服务端
  12.                  * */
  13.                
  14.                 System.out.println("TCP客户端启动.....");
  15.                 //创建客户端对象
  16.                 Socket s = new Socket("169.254.41.237", 20000);
  17.                
  18.         
  19.                 //读取本地文件
  20.                 BufferedReader bufr = new BufferedReader(new FileReader("c:\\新建文件夹txt"));
  21.                
  22.                 //获取客户端对象输出流,将数据发送给服务端
  23.                 //BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  24.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  25.                
  26.                 String leng = null;
  27.                 while((leng=bufr.readLine())!=null){
  28.                         out.println(leng);
  29.                 }
  30.                
  31.                 //发送结束标记
  32.                 s.shutdownOutput();
  33.                
  34.                 //获取客户端对象的读取流、接收服务端发回的数据
  35.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  36.         
  37.                 String lineIn = bufIn.readLine();
  38.                
  39.                 System.out.println(lineIn);
  40.                
  41.                
  42.                 //关闭资源
  43.                 bufIn.close();
  44.                 out.close();
  45.                 bufr.close();
  46.                 s.close();
  47.         }
复制代码


服务端

  1. import java.io.BufferedReader;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;

  8. public class ServerSocketTest {
  9.         public static void main(String[] args) throws IOException {
  10.                 /*
  11.                  * 获取客户端发送来的数据,并将数据存储到本地。收到后将接收结果发送给客户端
  12.                  * */
  13.                
  14.                 System.out.println("服务器启动.........");
  15.                 // 1、创建服务端对象、并监听一个端口
  16.                 ServerSocket ss = new ServerSocket(20000);

  17.                 // 2、获取客户端端对象
  18.                 Socket s = ss.accept();
  19.                 //System.out.println(s.getInetAddress().getHostAddress()+"...连接了!");
  20.         
  21.                 //获取客户端对象输入流
  22.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  23.                
  24.                 //创建文件输出流,明确目的
  25.                 //BufferedWriter bufw = new BufferedWriter(new FileWriter("c:\\复件"));
  26.                 PrintWriter pw = new PrintWriter(new FileWriter("c:\\复件.txt"),true);
  27.                
  28.                 String line = null;
  29.                 while((line=bufIn.readLine())!=null){
  30.                         pw.println(line);
  31.                 }
  32.                
  33.                 //获取客户端对象输出流,将数据发送给客户端
  34.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  35.                                 
  36.                 //发送数据
  37.                 out.println("上传成功");
  38.                
  39.                 //关闭服务
  40.                 pw.close();
  41.                 s.close(); //服务器一般在数据传输完成后先将客户端的连接关闭
  42.                 ss.close();
  43.                
  44.         }
  45. }
复制代码


谢谢......!!!!!!!!!!!!!!!!




作者: osully    时间: 2014-4-22 13:28
"169.254.41.237"  换成 127.0.0.1 还报异常吗
作者: heheka123    时间: 2014-4-22 13:33
  1. Socket s = new Socket("169.254.41.237", 20000);
复制代码

把你这个客户端连接的地址改成本地 127.0.0.1

让后先运行服务端,再运行客服端。Tcp协议是有状态协议,要完成三次握手的,才能完成通讯


作者: 无奈的年华ˊ    时间: 2014-4-22 14:03
heheka123 发表于 2014-4-22 13:33
把你这个客户端连接的地址改成本地 127.0.0.1

让后先运行服务端,再运行客服端。Tcp协议是有状态协议,要 ...

不是IP问题!哥们..
作者: heheka123    时间: 2014-4-22 14:23
  1. package day1;


  2. import java.io.BufferedReader;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.PrintWriter;
  7. import java.net.Socket;
  8. import java.net.UnknownHostException;

  9. public class SocketDemo {

  10.         public static void main(String[] args) throws UnknownHostException, IOException {
  11.                 /*
  12.                  * 通过客户端读取本地文件发送给服务端
  13.                  * */
  14.                
  15.                 System.out.println("TCP客户端启动.....");
  16.                 //创建客户端对象
  17.                 Socket s = new Socket("127.0.0.1", 20000);
  18.                
  19.         
  20.                 //读取本地文件
  21.                 BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
  22.                
  23.                 //获取客户端对象输出流,将数据发送给服务端
  24.                 //BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  25.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  26.                
  27.                 String leng = null;
  28.                 while((leng=bufr.readLine())!=null){
  29.                         out.println(leng);
  30.                 }
  31.                
  32.                 //发送结束标记
  33.                 s.shutdownOutput();
  34.                
  35.                 //获取客户端对象的读取流、接收服务端发回的数据
  36.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  37.         
  38.                 String lineIn = bufIn.readLine();
  39.                
  40.                 System.out.println(lineIn);
  41.                
  42.                
  43.                 //关闭资源
  44.                 bufIn.close();
  45.                 out.close();
  46.                 bufr.close();
  47.                 s.close();
  48.         }
  49. }
复制代码


你客服端的输出流弄错了,你写的是打印到前台了,socket没有发出去。
你改成        BufferedWriter bufOut =
                                        new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
这样就好了!!
作者: 无奈的年华ˊ    时间: 2014-4-22 15:54
heheka123 发表于 2014-4-22 14:23
你客服端的输出流弄错了,你写的是打印到前台了,socket没有发出去。
你改成        BufferedWriter bufO ...

好吧!哥们、你还是没有看清楚我代码!!  不是这些问题,问题是我客户端发送的文件名写错了。找不到文件




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