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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hhmm665544 中级黑马   /  2014-4-9 17:04  /  1201 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.net.*;
  2. import java.io.*;
  3. public class TCPDemo
  4. {

  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 // TODO 自动生成的方法存根
  8.                
  9.                 Socket s = new Socket("192.168.1.103",11908);//这句代码有什么问题吗?
  10.                 ServerSocket ss = new ServerSocket(11908);
  11.                
  12.                 new Thread(new TCPServerDemo(ss)).start();
  13.                 new Thread(new TCPClientDemo(s)).start();
  14.         }

  15. }
  16. class TCPClientDemo implements Runnable
  17. {
  18.         private Socket s;
  19.         public TCPClientDemo(Socket s)
  20.         {
  21.                 this.s = s;
  22.         }
  23.         public void run()
  24.         {
  25.                 try{
  26.                         Thread.sleep(2000);
  27.                         OutputStream out = s.getOutputStream();
  28.                         out.write("TCP ge men lai le ".getBytes());
  29.                         s.close();
  30.                 }
  31.                 catch(Exception e)
  32.                 {
  33.                         throw new RuntimeException("客户端异常");
  34.                 }
  35.         }
  36. }

  37. class TCPServerDemo implements Runnable
  38. {
  39.         private ServerSocket ss;
  40.         public TCPServerDemo(ServerSocket ss)
  41.         {
  42.                 this.ss = ss;
  43.         }
  44.         public void run()
  45.         {
  46.                 // TODO 自动生成的方法存根
  47.                 try{
  48.                                 Socket s = ss.accept();
  49.                                 InputStream in = s.getInputStream();
  50.                                 byte[] buf = new byte[1024];
  51.                                 int len = in.read(buf);
  52.                                 String ip = s.getInetAddress().getHostAddress();
  53.                                 System.out.println(ip+new String(buf,0,len));
  54.                                 s.close();
  55.                                 ss.close();
  56.                 }
  57.                 catch(Exception e)
  58.                 {
  59.                         throw new RuntimeException("服务端异常");
  60.                 }
  61.         }

  62. }
复制代码


Exception in thread "main" java.net.ConnectException: Connection refused: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at TCPDemo.main(TCPDemo.java:10)


求高手给解答下啊

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
我猜你是不是把这一大段的代码 给直接放在一个java中去编译运行了???
你代码一看就知道到错在哪!!
你是把服务端和客服端 用两个线程重写,你希望它切换运行?
你的异常的意思是 你发出请求给服务端 但是服务端并没有启动 当然会连接不上啦
你创建两个线程 线程之间谁先运行取决于系统的调度  要是服务端的那个线程刚好比客服端的先运行 兴许还能运行成功   要是客服端的的线程比服务端先运行的话 不就是请求连接失败

正确的做法是   分别用两个文件各自启动服务端  和 客服端 且 服务端要先运行与客服端
你试试!
我没有写代码 给你演示  希望版主给分

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
问题在于你先有客户端,客户端一存在就会去链接服务端。
但你的客户端存在时,你的服务端还没有产生呢
正确的做法应该是吧第十行和第十一行的代码互换一下。
就可以解决。当然,你还得确定你所用的端口号没有被系统占用。
回复 使用道具 举报 1 0
本帖最后由 Kelvinhu 于 2014-4-10 01:41 编辑
  1. //服务端:
  2. import java.io.*;
  3. import java.net.*;


  4. public class Chat {
  5.         public static void main(String[] args) {
  6.                 ServerSocket server = null;
  7.                
  8.                 try {
  9.                         server = new ServerSocket(6665);
  10.                 } catch (IOException e) {
  11.                         System.out.println("端口被占用,创建端口失败。");
  12.                 }
  13.                 Socket socket = null;
  14.                 while (true){
  15.                         try {
  16.                                 socket = server.accept();
  17.                         } catch (IOException e) {
  18.                                 System.out.println("客户端连接失败。");
  19.                         }
  20.                         new Thread(new Rev(socket)).start();
  21.                 }
  22.         }
  23. }

  24. class Rev implements Runnable{
  25.         Socket socket = null;
  26.         
  27.         Rev(Socket socket){
  28.                 this.socket = socket;
  29.         }
  30.         
  31.         public void run(){
  32.                 String ip=socket.getInetAddress().toString();
  33.                 try {
  34.                         while(true){
  35.                         DataInputStream ds = new DataInputStream(socket.getInputStream());
  36.                         String message = ds.readUTF();
  37.                         System.out.println(ip+":   "+message);
  38.                         }
  39.                 } catch (IOException e) {
  40.                         System.out.println("客户端"+ip+"已退出!");
  41.                 }
  42.         }        
  43. }
复制代码
  1. //客户端:

  2. import java.net.*;
  3. import java.io.*;
  4. import java.util.*;

  5. class Client{
  6.         public static void main(String args[]) throws Exception{
  7.                 Socket s = new Socket("127.0.0.1",6665);
  8.                
  9.                 OutputStream os = s.getOutputStream();
  10.                 DataOutputStream dos = new DataOutputStream(os);
  11.                 while(true){
  12.                         Scanner scanner = new Scanner(System.in);
  13.                         String string=scanner.next();
  14.                         if (string.equals("exit")){
  15.                                 System.out.println("退出了~");
  16.                                 s.shutdownInput();
  17.                                 dos.close();
  18.                                 s.close();
  19.                                 System.exit(0);
  20.                         }
  21.                         dos.writeUTF(string);
  22.                         dos.flush();
  23.                 }
  24.         }
  25. }
复制代码

看了下LZ出的错误是Exception in thread "main" java.net.ConnectException: Connection refused: connect
意思是不能连接出的错,要先启动服务端,再启动客户端才可以~


评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马