CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

Socket罢工了,请帮忙!!!

楼主ufox(不懂才问)2002-04-23 09:38:32 在 VC/MFC / 基础类 提问

我有如下代码,请帮帮我!!  
  CsocketClient:   public   CSocket{…}  
  ……  
  void   CSocketServer::OnAccept(int   nErrorCode)  
  {  
  CSocket::OnAccept(nErrorCode);  
  CSocketClient   *pSocket   =   new   CSocketClient(m_nSocketID++);  
  if(pSocket==NULL)  
  return;  
   
  if(!Accept(*pSocket))  
  {  
  delete   pSocket;  
  return;  
  }  
  gListClient.AddHead(pSocket);                           //gListClient:CPtrList对象  
  pSocket->Send(pBuf     ,nLen   ,     0)                   //正确发送,客户也接收到正确地数据pBuf为BYTE数组  
   
  }  
  …….  
  …….  
    POSITION   pos;  
    CSocketClient   *pSocket   =   NULL;  
         
  pos   =   m_pListClient->GetHeadPosition();  
  while   (pos   !=   NULL)  
  {  
  pSocket   =   m_pListClient->GetNext(pos);  
  if   (pSocket   !=   NULL)  
  {  
                        if   (pSocket->m_nSocketID   ==   nSockID   )  
        {    
  pSocket->Send(pBuf,nLen,0)             //   发送不出去,  
  int   nErr   =   GetLastError();                   //nErr==10036:操作被阻塞了。被一直阻塞下去了,永不翻身!!!  
  }  
                }  
  }  
  谢谢!!!! 问题点数:100、回复次数:10Top

1 楼lizmei001(暗黑)回复于 2002-04-23 09:53:17 得分 0

pSocket->Send(pBuf     ,nLen   ,     0)                   //正确发送,客户也接收到正确地数据pBuf为BYTE数组  
   
   
  你的pBuf在哪儿定义的  
  呵呵,先检查你的pBuf吧,应该是它溢出了:)Top

2 楼jyc_nj(老蔣)回复于 2002-04-23 09:56:19 得分 0

WSAEINPROCESS错误,进程里存在阻塞socket了。  
  你这个作法很有意思,有一个线程中accept来自client的socket(大概是在线程里吧),放入链表,再在另一处,依次取出每个clientsocket,发送。即使这种阻塞作法好象正常,但有一个明显的失误:如果只有你当前操作的socket是阻塞状态,而其他的都是可send的,岂不是一个人拖了大家的后腿?  
  所以,如果你不得不把对所有client的操作都作在一个while(也就是一个线程里),那你最好用些非阻塞的方法,比如,用select来先测试哪些socket是非阻塞状态。或者其他方法。Top

3 楼ufox(不懂才问)回复于 2002-04-23 09:58:58 得分 0

pSocket->Send(pBuf,nLen,0)             //   发送不出去,  
  我调试过,发现pBuf没有问题,定义为BYTE   pBuf[50],   nLen的值为27Top

4 楼ufox(不懂才问)回复于 2002-04-23 10:16:16 得分 0

为什么会被阻塞呢!!!Top

5 楼sexfreebird(自由鸟)回复于 2002-04-23 10:36:02 得分 0

我也觉得应该是pBuf有问题,nLen是什么类型的?你把nLen再设的小一点试试吧!Top

6 楼7009lp(寒)回复于 2002-04-23 10:39:43 得分 0

socket编程  
  1、不用MFC中的类,这在VC6技术内幕中有具体的说明。  
  2、如果是98下,应用重叠操作,即:WSASend等函数,这样不会阻塞,具体例程可以看MSDN在线帮助  
  Top

7 楼7009lp(寒)回复于 2002-04-23 10:46:44 得分 0

尤其MFC类在线程中不安全Top

8 楼shenleav(午枫)回复于 2002-04-23 10:57:05 得分 0

跟微软的例子差不多,应该没问题吧!Top

9 楼xgwlg(百事可乐)回复于 2002-04-23 11:29:44 得分 0

??Top

10 楼Javatomchen()回复于 2002-04-25 11:59:35 得分 100

拿分来Top

相关问题

  • 急,急!ORACLE罢工!
  • 楼下在罢工
  • 救急,显示器罢工?
  • 惨了,pb8罢工了
  • 我的声卡爱罢工
  • VS.NET 2003 罢工,怎么办?
  • 硬盘罢工怎么办
  • this 罢工了 救命呀
  • 为什么我的 ASP 会罢工?
  • WIN98SE关不了机(WIN98罢工)。

关键词

  • socket
  • 线程
  • null
  • psocket
  • pbuf
  • 阻塞
  • csocketclient
  • nlen
  • 操作
  • 发送

得分解答快速导航

  • 帖主:ufox
  • Javatomchen

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo