socket编程问题

while(TRUE){retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);//if(SOCKET... while(TRUE)
{
retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);
//if(SOCKET_ERROR==retval)
//break;
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)recvBuf);
}
我断点调试,发现我的程序一运行到retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len)这个函数,就跳出while循环了,把if语句注释起来也一样的跳出循环,为什么啊??
这样我后面的postmessage函数都没有发出自定义消息。。。。怎么回事??
展开
 我来答
353lsdxgs
2011-06-20 · TA获得超过2241个赞
知道大有可为答主
回答量:4865
采纳率:0%
帮助的人:2061万
展开全部
服务器端::

#pragma once
#include <iostream>
#include <Winsock2.h>

using namespace std;

#pragma comment(lib, "ws2_32.lib")

int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);

err=WSAStartup(wVersionRequested,&wsaData);
if (err!=0)
return -1;

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

//创建监听的套接字
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

//绑定套接字
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字设置为监听模式,准备接受用户请求
listen(sockSrv,5);

SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);

cout <<"欢迎您,服务端已经建立。\n";

SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

。。。。。。接下来就是recv() 和 send()函数的应用了。

客户端::

int main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested=MAKEWORD(1,1);

err=WSAStartup(wVersionRequested,&wsaData);
if (err!=0)
{
return -1;
}

if (LOBYTE(wsaData.wVersion)!=1||
HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return -1;
}
//创建套接字
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
cout <<"是否默认本地服务器?1/0 ?";
cin >>todo;
if (todo)
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
else{
cout <<"请输入服务器IPv4地址:\n";
char addr[16];
gets(addr);
addrSrv.sin_addr.S_un.S_addr=inet_addr(addr);
}
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

//向服务器发送请求
if (connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))
cout <<"连接失败!\n";
else
cout <<"连接成功!\n";

1.你不需要就不看得了
2.头文件只需要一个<WinSock2.h>已经给出
3.你不会的都去掉,就变成了C语言。
wangyujava
2011-06-19
知道答主
回答量:7
采纳率:0%
帮助的人:1.1万
展开全部
问题太不详细。你的是异步的socket吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式