WSAGetLastError返回10022??

soujiro 2009-12-08 08:28:14
小弟初次接触winsock编程,按书上例子敲了代码,结果
WSAGetLastError返回10022


// sock.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "sock.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// The one and only application object

CWinApp theApp;

using namespace std;

#pragma comment(lib,"ws2_32.lib")
int main(int argc,char* argv[])
{
WORD wVersion;
WSADATA wsaData;
int err;

wVersion=MAKEWORD(2,2);
err=WSAStartup(wVersion,&wsaData);
if(err!=0)
return 0;
//建立流式套接字
SOCKET listenSocket=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in addr;
int nSockErr;
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);
//设定监听窗口
addr.sin_port=htons(5101);
//绑定套接字
if(listen(listenSocket,5)==SOCKET_ERROR)
nSockErr=WSAGetLastError();
printf("服务器正在监听...\n");
//等待客户请求
SOCKET connectSocket=accept(listenSocket,NULL,NULL);
if(connectSocket==INVALID_SOCKET)
{
printf("接受错误\n");
nSockErr=WSAGetLastError();
printf("%d",nSockErr);
}
else
{
char buf[1024];
memset(buf,0,sizeof(char)*1024);
int n=recv(connectSocket,buf,1024,MSG_PEEK);
if(n>0)
printf("服务器已接收%d个字符:%s",n,buf);
}
closesocket(listenSocket);
closesocket(connectSocket);
WSACleanup();
getchar();
return 0;
}

结果一运行
服务器正在监听...
接受错误
1002

在网上搜了下
Socket error 10022 - Invalid argument

非法的参数列表??

难道参数不对?书上代码是这样的啊,我还很嫩,无法纠正书上的错误

在此请教各位了~~O(∩_∩)O谢谢
...全文
1517 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxz840926 2011-05-23
  • 打赏
  • 举报
回复
很可能你addr.sin_port=htons(5101);端口5101被其他程序占用,你换个端口试试
soujiro 2009-12-10
  • 打赏
  • 举报
回复
O(∩_∩)O~真少了~~
不过加上还是错的~~
//绑定套接字
if(bind(listenSocket,(struct sockaddr*)&addr,sizeof(addr)==SOCKET_ERROR))
nSockErr=WSAGetLastError();
//将套接字设置成监听状态
if(listen(listenSocket,5)==SOCKET_ERROR)
nSockErr=WSAGetLastError();
printf("服务器正在监听...\n");
//等待客户请求
SOCKET connectSocket=accept(listenSocket,NULL,NULL);
if(connectSocket==INVALID_SOCKET)
{。。。


不知道原因~~~请各位不厌其烦~~~O(∩_∩)O谢谢
nintendo_dskay 2009-12-10
  • 打赏
  • 举报
回复
bind、listen、accept
少了个bind
arong1234 2009-12-09
  • 打赏
  • 举报
回复
你怎么确信这是accept得错误码?你前面有很多次设置错误嘛得过程,出现错误也没退出啊?

很显然,在你listen之前,你又没bind,你设置得那个5101端口怎么会和socket联系起来?实际上你得listen就不应该成功,因为socket还没bind到一个端口上
soujiro 2009-12-09
  • 打赏
  • 举报
回复
自己up~~一下~~等待ing解决~~
soujiro 2009-12-08
  • 打赏
  • 举报
回复
是accept(listenSocket,NULL,NULL);
里的参数不对吗?
该怎样修改呢?
leewon1988 2009-12-08
  • 打赏
  • 举报
回复
MSDN上说:
Invalid argument. Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt (Windows Sockets) function). In some instances, it also refers to the current state of the socket — for instance, calling accept (Windows Sockets) on a socket that is not listening.
老吴笔记 2009-12-08
  • 打赏
  • 举报
回复
提供了一个无效的参数。

18,363

社区成员

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

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