为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容708150 2023-03-18 18:14:37
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,初学者,遇到这种莫名其妙的问题,求指教~
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

如果确认同一代码,同一工程,在其他机器良好,在本机
int m_iServerSocket = socket(AF_INET, SOCK_STREAM, 0);
m_iServerSocket ==-1.
getlasterror()对照看下错误。

看其他网络软件是否正常运行。

据经验,可能是本机安装的保护,监听类似软件造成问题。也可能是ipv4

查看完整回答
反对 回复 2023-03-22
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

使用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");

试试


查看完整回答
反对 回复 2023-03-22
  • 2 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信