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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 无奈的年华ˊ 高级黑马   /  2014-4-22 13:12  /  1253 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 无奈的年华ˊ 于 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. }
复制代码


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



评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 年华大水

查看全部评分

6 个回复

正序浏览
heheka123 发表于 2014-4-22 14:23
你客服端的输出流弄错了,你写的是打印到前台了,socket没有发出去。
你改成        BufferedWriter bufO ...

好吧!哥们、你还是没有看清楚我代码!!  不是这些问题,问题是我客户端发送的文件名写错了。找不到文件
回复 使用道具 举报
  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()));
这样就好了!!
回复 使用道具 举报
heheka123 发表于 2014-4-22 13:33
把你这个客户端连接的地址改成本地 127.0.0.1

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

不是IP问题!哥们..
回复 使用道具 举报
  1. Socket s = new Socket("169.254.41.237", 20000);
复制代码

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

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

回复 使用道具 举报
"169.254.41.237"  换成 127.0.0.1 还报异常吗

点评

是的、貌似跟IP地址没关系!  发表于 2014-4-22 13:31
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马