#include
#include"winsock2.h"
#pragma comment(lib,"ws2_32.lib")
#include
using namespace std;
int main(int argc, char* argv[] )
{
const int BUF_SIZE = 64;
WSADATA wsd;
SOCKET sServer;
SOCKET sClient;
//SOCKADDR_IN serverAddr;
struct socketaddr_in serverAddr;
}
最后一句报错,但是换成上一句注释掉的,就没有问题
请大神解答
struct socketaddr_in serverAddr;
这是c语言的写法,而不是c++的写法。
如果非要那么写,需要用typedef将struct socketaddr_in再定义socketaddr_in成
struct socketaddr_in serverAddr; 不是变量声明,而是结构体定义,而且是不完整的定义。
SOCKADDR_IN serverAddr;
是在winsock中封装的,不知道它的底层是不是调用的struct sockaddr_in.这应该就是为什么你会出错的原因吧
typedef struct sockaddr_in {
·......
} SOCKADDR_IN, *PSOCKADDR_IN;
最后一句改成 struct sockaddr_in serverAddr;
在vs2015上测试,编译通过。
struct 是定义结构体
在winsock2.h中有如下定义
typedef struct sockaddr_in SOCKADDR_IN;
所以你注释掉那行是正确的。系统写的肯定没错。系统这么做是为了兼容C和C++。
你自己那行,把struct去掉也是对的。因为C++里面struct已经和class 等价了,声明变量的时候不需要struct关键字。
socketaddr_in serverAddr