「已注销」 2018-07-30 14:30 采纳率: 0%
浏览 1395
已结题

执行时接收数据失败 recv failed with error 5013 求解

#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
void main(void)
{
WSADATA wsaData;
SOCKET ListeningSocket; //定义服务端的Socket,服务端Socket用于监听
SOCKET NewConnection; //定义客户端的Socket,客户端Socket用于连接
SOCKADDR_IN ServerAddr; //准备服务端的地址
SOCKADDR_IN ClientAddr; //客户端地址
int ClientAddrLen; //客户端地址的长度
int Ret; //用于检查是否成功所用的参数
int Port = 5150; //设置端口,一台计算机大约有六万多个端口,小的易用,设置时数字尽可能大
char DataBuffer[1024]; //定义一个缓存,缓存接受来的数据

//初始化windows Socket并检测是否成功
if((Ret = WSAStartup(MAKEWORD(2,2),&wsaData)) !=0 )
{
    printf("WSAStartup failed with error %d\n",Ret);
    return;
}

//创建一个Socket并检测是否创建成功
if((ListeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)
{
    printf("socket failed with error %d\n",WSAGetLastError());
    WSACleanup();
    return;
}

//绑定Socket和服务端的地址绑定
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 waiting a connection on port %d\n",Port);
printf("Listen(正在监听)...\n");

//接受客户端的连接
ClientAddrLen = sizeof(SOCKADDR);
if(NewConnection = accept(ListeningSocket,(SOCKADDR*)&ClientAddr,&ClientAddrLen) == INVALID_SOCKET)
{
    printf("accept failed with error %d\n",WSAGetLastError());
    closesocket(ListeningSocket);
    WSACleanup();
    return;
}

printf("We are 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,strlen(DataBuffer),0)) == SOCKET_ERROR)
{
    printf("recv failed with error %d\n",WSAGetLastError());
    closesocket(NewConnection);
    WSACleanup();
    return;
}

printf("We successfully received %d bytes.\n",Ret);
DataBuffer[Ret] = '\0';
printf("We are now going to close the client connetion.\n");
closesocket(NewConnection);
WSACleanup();
system("pause");

}

  • 写回答

3条回答 默认 最新

  • wjintao 2018-07-31 06:48
    关注

    因为你在接受数据前就已经关闭了服务器的通讯套接字,屏蔽这一行代码应该就可以了:closesocket(ListeningSocket);

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧