黑马程序员技术交流社区

标题: 我这段代码运行为什么报错,我查不出来?[已解决] [打印本页]

作者: 王金科    时间: 2012-8-23 22:48
标题: 我这段代码运行为什么报错,我查不出来?[已解决]
本帖最后由 王金科 于 2012-8-24 17:29 编辑
  1. import java.io.*;
  2. import java.net.*;

  3. public class TransTextDemo {

  4.         /**
  5.          * @param args
  6.          * @throws Exception
  7.          */
  8.         public static void main(String[] args) throws Exception {
  9.                 // TODO Auto-generated method stub
  10.                 Socket s = new Socket("127.0.0.1",10006);
  11.                 ServerSocket ss = new ServerSocket(10006);
  12.                
  13.                 new Thread(new TransServer(ss)).start();
  14.                 new Thread(new TransClient(s)).start();
  15.         }

  16. }

  17. class TransClient implements Runnable{
  18.         private Socket s;
  19.         TransClient(Socket s){
  20.                 this.s = s;
  21.         }
  22.         public void run(){
  23.                 //定义读取键盘数据的流对象
  24.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  25.                
  26.                 try {
  27.                         //定义目的,将数据写入到socket输出流,发给服务端
  28.                         PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  29.                         
  30.                         //定义一个socket读取流,读取服务端返回的数据
  31.                         BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  32.                         
  33.                         String line = null;
  34.                         while((line=bufr.readLine())!=null){
  35.                                 if("over".equals(line)){
  36.                                         break;
  37.                                 }
  38.                                 out.println(line);
  39.                                 String str = bufIn.readLine();
  40.                                 System.out.println("server:"+str);
  41.                         }
  42.                         bufr.close();
  43.                         s.close();
  44.                 } catch (IOException e) {
  45.                         // TODO Auto-generated catch block
  46.                         e.printStackTrace();
  47.                 }
  48.         }
  49. }

  50. class TransServer implements Runnable{
  51.         private ServerSocket ss;
  52.         TransServer(ServerSocket ss){
  53.                 this.ss = ss;
  54.         }
  55.         
  56.         public void run(){
  57.                 try {
  58.                         Socket s = ss.accept();
  59.                         
  60.                         //读取socket流中的数据
  61.                         BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  62.                         
  63.                         //目的,socket输出流,将大写数据写入到socket输出流,并发送给客户端
  64.                         
  65.                         PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  66.                         String line =null;
  67.                         while((line=bufIn.readLine())!=null){
  68.                                 out.println(line);
  69.                         }
  70.                         s.close();
  71.                         ss.close();
  72.                 } catch (IOException e) {
  73.                         // TODO Auto-generated catch block
  74.                         e.printStackTrace();
  75.                 }
  76.         }
  77. }
复制代码
提示:
  1. Exception in thread "main" java.net.ConnectException: Connection refused: connect
  2.         at java.net.DualStackPlainSocketImpl.connect0(Native Method)
  3.         at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
  4.         at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
  5.         at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
  6.         at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
  7.         at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
  8.         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
  9.         at java.net.Socket.connect(Socket.java:579)
  10.         at java.net.Socket.connect(Socket.java:528)
  11.         at java.net.Socket.<init>(Socket.java:425)
  12.         at java.net.Socket.<init>(Socket.java:208)
  13.         at cn.study.inet.TransTextDemo.main(TransTextDemo.java:35)
复制代码

作者: 王陶成    时间: 2012-8-23 23:03
服务器端客户端颠倒一下
作者: 王金科    时间: 2012-8-23 23:24
王陶成 发表于 2012-8-23 23:03
服务器端客户端颠倒一下

Socket s = new Socket("127.0.0.1",10006);
ServerSocket ss = new ServerSocket(10006);
这两句换一下位置怎么就可以了呢?这是什么原理

new Thread(new TransServer(ss)).start();
new Thread(new TransClient(s)).start();
换这两句怎么不行?
作者: 周开伟    时间: 2012-8-24 02:19
先建立服务器端确定监听的端口再建立客户端,这样客户端才能访问到服务器端。否则会抛出拒绝访问。你说的交换后面启动线程的那两句是不行的。
作者: 王金科    时间: 2012-8-24 17:27
周开伟 发表于 2012-8-24 02:19
先建立服务器端确定监听的端口再建立客户端,这样客户端才能访问到服务器端。否则会抛出拒绝访问。你说的交 ...

嗯,现在想明白了,之前一直想不明白,总以为是线程先后执行的问题




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