当前位置:  技术问答>linux和unix

socket 编程问题??

    来源: 互联网  发布时间:2016-08-16

    本文导语:  我写的通信程序,为什么在本机上运行几分钟后,cpu占用率奇高?? | while(1) { bzero(receive,MAX_CMD); if( read(peer_sockmsg,receive,MAX_CMD) == -1 ) { perror("read errorn"); exit(1); } if( !strcmp(receive,"quit")) { cmd_quit(peer_s...

我写的通信程序,为什么在本机上运行几分钟后,cpu占用率奇高??

|

while(1)
{
bzero(receive,MAX_CMD);

if( read(peer_sockmsg,receive,MAX_CMD) == -1 )
{
perror("read errorn");
exit(1);
}

if( !strcmp(receive,"quit"))
{
cmd_quit(peer_sock,peer_sockmsg);
continue;
}

else if( !strcmp(receive,"cd") )
{
cmd_cd(peer_sock,peer_sockmsg);
continue;
}
else if( !strcmp(receive,"dir") )
{
cmd_dir(peer_sock,peer_sockmsg);
continue;
}
else if( !strcmp(receive,"qwd") )
{
cmd_qwd(peer_sock,peer_sockmsg);
continue;
}
else if( !strcmp(receive,"get") )
{
cmd_get(peer_sock,peer_sockmsg);
printf("here!n");//debug
continue;

}



/* incomplited*/

}
}
}
while(1);
}




红色部分,是怎么回事呢?


|

 你do {} while(1) 循环fork一次建立一个子进程

  你说父进程用于accept,这个没错

 可你干嘛在子进程里面又while(1)啊?

  每个子进程不停的read?

 就是说你开无数个进程,每个进程都无限循环read

  最终造成资源被耗尽 ....

 你这种设计就不对!

  如果你非要坚持用死循环,也只能在父进程用,子进程用完就exit退出

 再具体就没得说了 ....

|

等等,等等,等等,你这个服务器不是短连接吗?

客户端connect完就close,不是吗?(我一直是按这个思路走的)

如果是这样,你子进程的read阻塞读取就没有意义

反过来说,如果是长连接,出现资源耗费的情况,那问题就在客户端了

|
如果你确认为长连接的话,那最好检查一下你客户端的代码是否有问题吧

如果你客户端代码存在close关闭连接的情况

就会出现服务端大量子进程造成资源浪费导致资源最终被耗尽

    
 
 

您可能感兴趣的文章:

  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • socket 编程时,write的写入的数据大于socket缓冲区,会有什么结果??
  • Linux下使用openssl api编程socket编程,为什么要编译啊?
  • 关于文件操作和Socket网络编程!
  • linux下socket编程问题!
  • socket编程 中的bind问题
  • socket编程--htons
  • 急!!请教关于linux socket编程的一个问题!!
  • 急!关于SOCKET编程,在线等待!
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • 多进程socket编程问题
  • 问一个socket编程问题,急~~~
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • 请教一个socket编程问题
  • 求助!!linux下socket编程
  • socket编程,使用recvfrom()函数监听问题。
  • sco unix下socket编程的问题,请大家帮忙
  • linux socket问题。。怎样获得已帮定特定port的一个套接字socket
  • 关于socket概念的理解问题!
  • 你是否可以回答Socket的问题?数据先后问题
  • Socket的问题
  • socket accept问题,大家指教。
  • socket客户端程序的问题
  • 关于多网口socket通信的简单问题
  • HTML教程 iis7站长之家
  • linux socket fd 写阻塞问题
  • linux下用socket实现多进程间通信问题?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • 我的ping程序怎么老是出现Socket operation on non-socket
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • sco unix 下输入 man socket 居然显示 man:socket not found up有分
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 爲何這樣?variable socket might not have been initialized --socket.close()


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3