为什么此段代码其他机器都好使,但在我电脑上不行?

void CServerDlg::OnBnClickedButton1()
{

/////////////////////////////////////////////////
int m_iServerSocket = socket(AF_INET, SOCK_STREAM, 0);

SOCKADDR_IN m_rcvaddr;
memset((void *)&m_rcvaddr, 0, sizeof(SOCKADDR_IN));
m_rcvaddr.sin_family = AF_INET;
m_rcvaddr.sin_addr.s_addr = inet_addr("0.0.0.0");
m_rcvaddr.sin_port = htons(1000);

//绑定
bind(m_iServerSocket, (struct sockaddr *)&m_rcvaddr, sizeof(SOCKADDR_IN));

//监听
listen(m_iServerSocket, 5);

//客户端
SOCKET cmdsrv = (int)accept(m_iServerSocket,NULL,NULL);

if(cmdsrv == INVALID_SOCKET)
{
int err=GetLastError();
return;
}

char buf[1024];
//接收数据
int rxn = recv(cmdsrv, buf, 1024,0);
buf[rxn] = '\0';
AfxMessageBox(buf);

sprintf(buf, "你也好,再见");
send(cmdsrv, buf, strlen(buf), 0);

closesocket(m_iServerSocket);
}

此段代码其他机器都好使,但在我电脑上不行,socket返回值总是-1,环境都是用的VS2010,初学者,遇到这种莫名其妙的问题,求指教~

慕容708150
浏览 100回答 2
2回答

富国沪深

如果确认同一代码,同一工程,在其他机器良好,在本机int m_iServerSocket = socket(AF_INET, SOCK_STREAM, 0);m_iServerSocket ==-1.getlasterror()对照看下错误。看其他网络软件是否正常运行。据经验,可能是本机安装的保护,监听类似软件造成问题。也可能是ipv4

尚方宝剑之说

使用WSAGetLastError()获取具体错误代码,找到对应错误描述信息,再解决问题。在socket函数之前,加上:#include <stdio.h>#include "winsock2.h"// Initialize Winsock.WSADATA wsaData;int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);if (iResult != NO_ERROR)printf("Error at WSAStartup()\n");试试
打开App,查看更多内容
随时随地看视频慕课网APP