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函数都没有发出自定义消息。。。。怎么回事?? 展开
{
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函数都没有发出自定义消息。。。。怎么回事?? 展开
2个回答
展开全部
服务器端::
#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语言。
#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语言。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询