急救:初学网络编程,用,第一个例子就出问题.

Phenix_Nirvana 2004-11-20 07:18:22
这是服务器端代码,运行时提示
We are awaiting a connection on port 5150.
accept failed with error 10014
这是怎么回事??
源代码如下:

#include <winsock2.h>
#include <stdio.h>

void main(void)
{
WSADATA wsaData;
SOCKET ListeningSocket;
SOCKET NewConnection;
SOCKADDR_IN ServerAddr;
SOCKADDR_IN ClientAddr;
int ClientAddrLen;
int Port = 5150;
int Ret;
char DataBuffer[1024];

if ((Ret = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0)
{
printf("WSAStartup failed with error %d\n", Ret);
return;
}


if ((ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))
== INVALID_SOCKET)
{
printf("socket failed with error %d\n", WSAGetLastError());
WSACleanup();
return;
}


ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(Port);
ServerAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);



if (bind(ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr))
== SOCKET_ERROR)
{
printf("bind failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return;
}


if (listen(ListeningSocket, 5) == SOCKET_ERROR)
{
printf("listen failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return;
}

printf("We are awaiting a connection on port %d.\n", Port);



if ((NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr,
&ClientAddrLen)) == INVALID_SOCKET)
{
printf("accept failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return;
}


printf("We successfully got a connection from %s:%d.\n",
inet_ntoa(ClientAddr.sin_addr), ntohs(ClientAddr.sin_port));



closesocket(ListeningSocket);



printf("We are waiting to receive data...\n");

if ((Ret = recv(NewConnection, DataBuffer, sizeof(DataBuffer), 0))
== SOCKET_ERROR)
{
printf("recv failed with error %d\n", WSAGetLastError());
closesocket(NewConnection);
WSACleanup();
return;
}

printf("We successfully received %d byte(s).\n", Ret);



printf("We are now going to close the client connection.\n");

closesocket(NewConnection);


WSACleanup();

...全文
210 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovelyxiaoyu 2004-11-25
  • 打赏
  • 举报
回复
void main(void)
{
WSADATA wsaData;
SOCKET ListeningSocket;
SOCKET NewConnection;
SOCKADDR_IN ServerAddr;
SOCKADDR_IN ClientAddr;
int ClientAddrLen;
int Port = 5150;
int Ret;
char DataBuffer[1024];
ClientAddrLen = sizeof(SOCKADDR_IN);

~~烂书,不负责

friendzj 2004-11-25
  • 打赏
  • 举报
回复
楼上的,为什么说初学者用这本书要小心??这本书问题很多?
freeshoot 2004-11-25
  • 打赏
  • 举报
回复
照我的试试:

// 在accept前加上这句:
ClientAddrLen = sizeof(SOCKADDR);

if ((NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr,
&ClientAddrLen)) == INVALID_SOCKET)
DentistryDoctor 2004-11-25
  • 打赏
  • 举报
回复
你有这本书的配套光盘?
celerityok 2004-11-25
  • 打赏
  • 举报
回复
mark!
HunterForPig 2004-11-25
  • 打赏
  • 举报
回复
初学者用这本书,要小心哦!
gdy119 2004-11-25
  • 打赏
  • 举报
回复
10014 服务器提供的IP地址错误!
象这样绝对没问题!
serv.sin_addr.s_addr = htonl(INADDR_ANY);
serv.sin_family=AF_INET;
serv.sin_port=htons(2406);

wenxinfly 2004-11-25
  • 打赏
  • 举报
回复
那么给初学者提供几本书吧!!
Phenix_Nirvana 2004-11-24
  • 打赏
  • 举报
回复
ip地址设定了,还是不行。
lonenomad 2004-11-21
  • 打赏
  • 举报
回复
我试了一试,改了之后还是有错误,不过我这台机器上没有网卡,呵呵,不知是不是这个原因,我的是BIND错误。
ChinaBJZ 2004-11-20
  • 打赏
  • 举报
回复
ServerAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
ServerAddr.sin_addr.S_un.S_addr = INADDR_ANY;

应该是这样的吧。
Phenix_Nirvana 2004-11-20
  • 打赏
  • 举报
回复
设定之后还是出现同样错误!!!!

oyljerry 2004-11-20
  • 打赏
  • 举报
回复
如上设定地址就好了
Jarrylogin 2004-11-20
  • 打赏
  • 举报
回复
//设定地址
serv.sin_addr.s_addr=inet_addr("211.65.60.18");
serv.sin_family=AF_INET;
serv.sin_port=htons(2406);
addlen=sizeof(serv);
Jarrylogin 2004-11-20
  • 打赏
  • 举报
回复
你的IP地址没设定
zhutao9_21 2004-11-20
  • 打赏
  • 举报
回复
系统检测到在一个调用中尝试使用指针参数时的无效指针地址。
Phenix_Nirvana 2004-11-20
  • 打赏
  • 举报
回复
这是服务器端,怎么会错了??代码里面并没有制定地址阿?

应该怎么解决呢?
oyljerry 2004-11-20
  • 打赏
  • 举报
回复
WSAEFAULT(10014) Bad address.
地址错误

18,356

社区成员

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

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