Socket编程基础问题,关于listen和socketerror10014

FinlandRBT 2006-06-29 09:50:44
最近在学网络编程,看《windows网络编程》,我按照第一个例子用C编写服务器端程序。阻塞模型,每次一执行就会返回:

We are awaiting a connection on port 5150.
accept failed with error 10014

我想这段话对于很多人来说都不陌生,我想为何listen的时候系统没有进入监听等待状态,直接执行accept,造成10014错误。这段代码的vb版本就能很好地执行。所以我想虽然报错是accept,但问题应该出在listen上面吧?

在线等求高人指点。

Socket error 10014 - Bad address

下面是源程序,我想大多数人都见过了。

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

#include <stdafx.h>

int main()
{
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 0;
}
ListeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ListeningSocket == INVALID_SOCKET)
{
printf("socket failed with error %d\n", WSAGetLastError());
WSACleanup();
return 0;
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = Port;
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(ListeningSocket,(SOCKADDR *)&ServerAddr,sizeof(ServerAddr)))
{
printf("bind failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return 0;
}
if(listen(ListeningSocket,5) == SOCKET_ERROR)
{
printf("listen failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return 0;
}
printf("We are awaiting a connection on port %d.\n", Port);
NewConnection = accept(ListeningSocket,(SOCKADDR *)&ClientAddr,&ClientAddrLen);
if(NewConnection == INVALID_SOCKET)
{
printf("accept failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return 0;
}
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 0;
}
printf("We successfully received %d byte(s).%s\n", Ret, DataBuffer);
printf("We are now going to close the client connection.\n");
closesocket(NewConnection);
WSACleanup();
return 0;
}
...全文
401 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
AN_941 2006-06-30
  • 打赏
  • 举报
回复
找到原因了,恭喜.................
ytfrdfiw 2006-06-30
  • 打赏
  • 举报
回复
接个分。
boxban 2006-06-29
  • 打赏
  • 举报
回复
另外,还有个问题:
ServerAddr.sin_port = Port;
---> ServerAddr.sin_port = htons(Port);


FinlandRBT 2006-06-29
  • 打赏
  • 举报
回复
找到原因了,ClientAddrLen没有定义。

多谢大家。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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