本帖最后由 victory06057231 于 2009-08-07 10:30:03 编辑

解决方案 »

  1.   

    public static void main(String args[]) throws Exception {
            ServerSocket serverSocket = new ServerSocket(5678);
            while (true) {
                Server server = new Server(serverSocket.accept());
                server.start();
            }    }
    服务器端这里有问题while(true)死循环,不停的创建Server
      

  2.   

    而且我把while循环去掉,cpu还是100%
      

  3.   

    我是这么写的int serverPort = 55001;
    DatagramSocket ds = null;

    try {
    ds = new DatagramSocket(serverPort);
    } catch (SocketException e) {
    e.printStackTrace();
    System.exit(-1);
    }
    byte[] buffer = new byte[bufferLength];
    DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
    while (true) {
    try {
    ds.receive(dp);
    byte[] recvByteArray = dp.getData();
    if (checkCRC(recvByteArray)) {
    for (int i = 0; i < recvByteArray.length; i++) {
    byte b = recvByteArray[i];
    System.out.printf("0x%02X ", b);
    }
    } else {
    System.out.println("CRC检测未通过");
    }
    rcvCount++;
    System.out.println("收到心跳:" + rcvCount);
    } catch (IOException e) {
    e.printStackTrace();
    continue;
    }
    // System.out.println();
    }
      

  4.   

    上面是UDP协议的,我找个TCP的
      

  5.   

    看代码,楼主的基本功,不是很扎实。
    建议,先补补基本功吧。CPU占用过高,看代码,应该是客户端的死循环造成滴。
    而且,我看不明白,while循环体里面那个close方法放在里面干什么用。先把基础语法和三大结构掌握好了,然后,掌握IO方面的几个常用类,最后,再看net包下的东西。
      

  6.   

    try {
    ss = new ServerSocket(PORT);
    started = true;
    } catch (BindException e) {
    System.out.println("端口使用中....");
    System.out.println("请关掉相关程序并重新运行服务器!");
    System.exit(0);
    } catch (IOException e) {
    e.printStackTrace();
    } try {
    while (started) {
    Socket s = ss.accept();
    // JinChuZhan c = new JinChuZhan(s);  // 进出站
    // RenZhengQingQiu c = new RenZhengQingQiu(s); // 认证请求
    // RenZhengQueRen c2 = new RenZhengQueRen(s); // 认证确认
    // Log4XiaFaDiaoDu c2 = new Log4XiaFaDiaoDu(s);
    Zhuanfa e = new Zhuanfa(s);
    System.out.println(s.getInetAddress().toString() + " connected!");
    // new Thread(c).start();
    // new Thread(c2).start();
    new Thread(e).start();
    clients.add(e);
    }
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    if (!ss.isClosed()) {
    ss.close();
    ss = null;
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }这是个TCP的,注释部分就别看了,都是不同的线程类,我是做测试的,用这些东西向通讯服务器发不同种类的消息,不太好看写的
      

  7.   

    是客户端中构造函数里面的while循环去掉就行了,谢谢大家了