求助高手!!!我这样server写为什么连不上呢?????急 头文件什么的我都包含了

lili830209 2006-11-27 05:22:40
void Cserver::OnOK()
{
// TODO: Add extra validation here
WSADATA wsaData;
DWORD dwThreadID;
HANDLE lThread;
int res=WSAStartup(MAKEWORD(2,2),&wsaData);
if(res!=0)
{
MessageBox("WinSock初始化失败","提示",MB_OK);
WSACleanup();//初始化失败,解除与Socket库的绑定释放占用资源
}

SOCKET sListen;
sListen = socket(AF_INET,SOCK_STREAM,0);//还是很迷惑第三个参数的0,sListen返回新创建的套接字
if(sListen==INVALID_SOCKET)
{
MessageBox("无法创建服务器socket","提示",MB_OK);
WSACleanup();
}

struct sockaddr_in local;//本机ip
local.sin_addr.s_addr=htonl(INADDR_ANY);//sListen监视所有给本机ip的5144端口发的数据
local.sin_family = AF_INET;
local.sin_port = htons(5144);

int resa= bind(sListen,(struct sockaddr*)&local,sizeof(local));//给sListen绑定本地IP与设置的端口
if (resa==SOCKET_ERROR)
{
MessageBox("无法绑定服务器。","提示",MB_OK);
closesocket(sListen);
}
//WSAGetLastError();
SOCKET sClient;//判断客户端是否启动的,如果客户端没启动就继续循环
struct sockaddr_in client;
int iAddrSize;
while(1)
{
iAddrSize = sizeof(client);
sClient = accept(sListen,(struct sockaddr*)&client,&iAddrSize);
if (sClient==INVALID_SOCKET)
{
break;
}
lThread = CreateThread(NULL,0,MyThread,(LPVOID)sClient,0,&dwThreadID);

if (lThread==NULL)
{
break;
}
CloseHandle(lThread);
}
closesocket(sListen);
WSACleanup();
//CDialog::OnOK();
}
...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lili830209 2006-11-27
  • 打赏
  • 举报
回复
我加上了 if (listen(sListen,10)==SOCKET_ERROR);
{
MessageBox("listen错误","提示",MB_OK);
closesocket(sListen);
}
JIEGUO 结果启动后弹出 listen错误
LiChenYue 2006-11-27
  • 打赏
  • 举报
回复
不懂,学习,顶一下
jacklzw88 2006-11-27
  • 打赏
  • 举报
回复
你不侦听怎么知道有包来,楼上或的加listen
rageliu 2006-11-27
  • 打赏
  • 举报
回复
//
//这里需要增加listen
//


上面的这个地方,还需要调用一个listen()函数,你仔细看看
rageliu 2006-11-27
  • 打赏
  • 举报
回复
你这不是我说的listen,你这是接收啊

int resa= bind(sListen,(struct sockaddr*)&local,sizeof(local));//给sListen绑定本地IP与设置的端口


//这里你做了绑定
//
//
if (resa==SOCKET_ERROR)
{
MessageBox("无法绑定服务器。","提示",MB_OK);
closesocket(sListen);
}
//WSAGetLastError();
SOCKET sClient;//判断客户端是否启动的,如果客户端没启动就继续循环
struct sockaddr_in client;
int iAddrSize;
//
//这里需要增加listen
//
while(1)
{
iAddrSize = sizeof(client);
//
//这里你accept
//
sClient = accept(sListen,(struct sockaddr*)&
lili830209 2006-11-27
  • 打赏
  • 举报
回复
我写了另一个线程处理函数
DWORD WINAPI Cserver::MyThread(LPVOID lpParam)//线程处理函数
{
//开始监听是否有客户端连接。处理数据 接受 显示
SOCKET sock = (SOCKET)lpParam;
char szBuff[256];
memset(szBuff,0,256);//初始化szBuff
int rea;
while (1)
{
rea = Receive(sock,szBuff,256);
if (rea>0)
{
theApp.GetMainWnd()->GetDlgItem(IDC_REV)->SetWindowText(szBuff);
strcat(szBuff," :我是土豆,已收到");
Send(sock,szBuff,256);
}
else
{
break;
}

}
return 1;

}

来监听.....
rageliu 2006-11-27
  • 打赏
  • 举报
回复
没有征听当然会有问题的,加上试试,呵呵
rageliu 2006-11-27
  • 打赏
  • 举报
回复
listen()函数掉了.

bind和accept间

18,357

社区成员

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

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