紧急问题求助,分不够再开贴追加!

peter9606 2004-04-19 11:48:58
int CServiceThread::Run()
{
sockaddr_in serverAddr;
sockaddr_in clientAddr;
int addinlength = sizeof(clientAddr);
int nRet ;
int nEc ;
SgmHeader sgmHeader1 ;
SgmHeader sgmHeader2 ;
RplHeader rplHeader ;

WORD wVersion = MAKEWORD(1,1) ;
WSADATA wsaData ;


DWORD time1,time2 ;

WORD w ;
DWORD ww ;

BOOL Frame_flg = TRUE ;


nRet = WSAStartup(wVersion,&wsaData) ;


serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(m_Port);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);


if (nRet != 0) {
WSACleanup() ;
return -1 ;
}

if (wVersion != wsaData.wVersion) {
WSACleanup() ;
return -1 ;
}

m_ListeningSocket = socket (AF_INET,SOCK_STREAM,IPPROTO_TCP) ;

if (m_ListeningSocket < 0) {
WSACleanup() ;
return -1 ;
}

nRet = bind(m_ListeningSocket,(SOCKADDR *)&serverAddr,sizeof(serverAddr));

if(nRet == SOCKET_ERROR){
closesocket(m_ListeningSocket);
WSACleanup();
return -1;
}

listen(m_ListeningSocket,1);

m_ServiceSocket = accept(m_ListeningSocket,(sockaddr *)&clientAddr,&addinlength);

fd_set readfds ;
readfds.fd_count = 1 ;
readfds.fd_array[0] = m_ServiceSocket ;

const char FAR* optival ;
int nByte = 300000 ;

optival = (const char *)&nByte ;
setsockopt (m_ServiceSocket,SOL_SOCKET,SO_RCVBUF,optival,4) ;

u_long FAR argp ;
argp = 1 ;
ioctlsocket (m_ServiceSocket,FIONBIO,&argp) ;


while (1) {

if (select (0,&readfds,NULL,NULL,NULL) == 1) {
::AfxMessageBox("难道我又接收到了么?",MB_OK|MB_ICONERROR);
}

return CWinThread::Run();
}

请问这个流程有什么错误么?

我在实际运行的时候 第一次接收电文 很好很正常 服务器端启动以后等待接收客户端来的数据.
但是在第一次处理完数据后,不等客户端发送数据就又弹出了"难道我又接收到了么?"的对话框.我不知道这里到底是怎么回事
希望高人指点
万分感谢!
...全文
19 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldcup 2004-04-19
  • 打赏
  • 举报
回复
是啊,数据没有recv吧
Hendy_So 2004-04-19
  • 打赏
  • 举报
回复
好像没看到你在哪里处理数据啊
peter9606 2004-04-19
  • 打赏
  • 举报
回复
各位大牛们 赶紧帮忙呀 谢谢拉
flyinwuhan 2004-04-19
  • 打赏
  • 举报
回复
你的判断方式是错的---select用错了

FD_ZERO(&fdread);
FD_SET(s,&fdread); //加入套接字,详细定义请看winsock2.h
if(select(0,%fdread,NULL,NULL,NULL)>0
{
//成功
if(FD_ISSET(s,&fread) //是否存在fread中,详细定义请看winsock2.h
{
//是可读的
}
}

peter9606 2004-04-19
  • 打赏
  • 举报
回复
我都在if (select (0,&readfds,NULL,NULL,NULL) == 1) {
::AfxMessageBox("难道我又接收到了么?",MB_OK|MB_ICONERROR);
}
里面接收数据的呀处理完后发送
第一次接收的时候好好的
但是第二次 客户端没有发送数据呢
就服务器就直接弹出 对话框了(AfxMessageBox("难道我又接收到了么?",MB_OK|MB_ICONERROR);
)可是却什么都没有接收到.

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧