简单的socket程序,但是cpu却一直是100% 本帖最后由 victory06057231 于 2009-08-07 10:30:03 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 而且我把while循环去掉,cpu还是100% 我是这么写的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(); } 上面是UDP协议的,我找个TCP的 看代码,楼主的基本功,不是很扎实。建议,先补补基本功吧。CPU占用过高,看代码,应该是客户端的死循环造成滴。而且,我看不明白,while循环体里面那个close方法放在里面干什么用。先把基础语法和三大结构掌握好了,然后,掌握IO方面的几个常用类,最后,再看net包下的东西。 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的,注释部分就别看了,都是不同的线程类,我是做测试的,用这些东西向通讯服务器发不同种类的消息,不太好看写的 是客户端中构造函数里面的while循环去掉就行了,谢谢大家了 Java里面的封装是否和迪米特法则有冲突 java 输入问题!! java线程的问题,大家帮个忙啊!小弟急等!!! oracle函数写法不懂 JCREAT CardLayout的问题: http消息包的结束标记 java 进制转换 请教 applet的archieve问题 大家好我刚毕业还没找到工作请大家提供一些找工作的经验式者提供一些需要java程序的公司 大家来帮我看下这两个表达式有什么区别 java发送邮件失败
ServerSocket serverSocket = new ServerSocket(5678);
while (true) {
Server server = new Server(serverSocket.accept());
server.start();
} }
服务器端这里有问题while(true)死循环,不停的创建Server
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();
}
建议,先补补基本功吧。CPU占用过高,看代码,应该是客户端的死循环造成滴。
而且,我看不明白,while循环体里面那个close方法放在里面干什么用。先把基础语法和三大结构掌握好了,然后,掌握IO方面的几个常用类,最后,再看net包下的东西。
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的,注释部分就别看了,都是不同的线程类,我是做测试的,用这些东西向通讯服务器发不同种类的消息,不太好看写的