非阻塞方式SOCKET的问题,在线急等,立即结算,高手快来,绝对牛逼!

edwardyoung 2003-10-17 09:35:19
Subject: 请教一个关于非阻塞方式SOCKET的问题


你好:
请教一个问题

struct ContextKey
{
SOCKET sock;
OVERLAPPED overlapped; //I/O操作的重叠状态
//WSABUF DataBuf; //数据缓冲区结构
char InBuffer[4]; //真正的缓冲区
DWORD BytesSEND; //发送的字节数
DWORD BytesRECV; //收到的字节数
}*LPContextKey;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////


//创建完成端口句柄
if((ghCompPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0)) == NULL)
{
MessageBox(NULL,"WSAStartup Failed",NULL,MB_OK);
exit(1);
}

listener = socket(AF_INET,SOCK_STREAM,0); //创建监听套接字
if(listener < 0)
{
MessageBox(NULL,"socket() failed","Error",MB_OK);
exit(1);
}

memset(&serverAddr,0,sizeof(serverAddr)); //绑定套接字到端口1017
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
serverAddr.sin_port = htons(serverPort);

err = bind(listener,(LPSOCKADDR)&serverAddr,sizeof(serverAddr));
if(err < 0)
{
MessageBox(NULL,"bind() failed",NULL,MB_OK);
}

if(ghCompPort == NULL)
{
MessageBox(NULL,"CreateIoCompletionPort() failed",NULL,MB_OK);
}

CreateWorkerThreads(); //工作者线程

if(listen(listener, 5) == SOCKET_ERROR) // 开始监听
{
MessageBox(NULL,"CreateIoCompletionPort() failed",NULL,MB_OK);
}

for(;;)
{
struct ContextKey *pKey;

clAddrLen = sizeof(clientAddr);
//等待客户端的连接
newsocket = accept(listener,
(struct sockaddr *)&clientAddr,
&clAddrLen);
//newsocket = WSAAccept(listener,NULL,NULL,0);
if (newsocket < 0)
{
MessageBox(NULL,"accept() Failed",NULL,MB_OK);
exit(1);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//请问以下语句为何赋值不了, 谢谢
pKey->sock = newsocket;在于
//pKey->ovOut.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
//pKey->ovOut.hEvent = (HANDLE)((DWORD)pKey->ovOut.hEvent | 0x1);
...全文
44 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CounterHack 2003-10-20
  • 打赏
  • 举报
回复
pKey没有初始化,要先初始化。
chenwhenlong 2003-10-18
  • 打赏
  • 举报
回复
struct ContextKey *pKey;
改成
struct ContextKey* pKey = new ContextKey;
huanyun 2003-10-18
  • 打赏
  • 举报
回复
晕 pKey是个野指针 没有初始化
struct ContextKey* pKey = new ContextKey;
实例化 分配内存
记得最后delete
studyingpersons 2003-10-18
  • 打赏
  • 举报
回复
gz
victorydsk 2003-10-18
  • 打赏
  • 举报
回复
pKey没有初始化,要先初始化才行

18,356

社区成员

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

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