mingw linux socket,在windows下用C语言写了关于socket的程序,用mingw没法编译成功,但是改成C++程序就可以,这是为什么...

在windows下用C语言写了关于socket的程序,用mingw无法编译成功,但是改成C++程序就可以,这是为什么

如题:在windows下用C语言写了关于socket的程序,用mingw无法编译成功(用gcc -o client1 client1.c -lws2_32),但是改成C++程序就可以(也没改程序内容,就是程序后缀是.cpp,用g++命令就可以编译成功),这是为什么?

client程序如下#include 

#include 

#include 

#include 

#pragma  comment(lib,"ws2_32.lib")

int main(int argc, char* argv[])

{

WORD sockVersion = MAKEWORD(2,2);

WSADATA data;

if(WSAStartup(sockVersion, &data) != 0)

{

return 0;

}

SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if(sclient == INVALID_SOCKET)

{

printf("invalid socket !");

return 0;

}

sockaddr_in serAddr;

serAddr.sin_family = AF_INET;

serAddr.sin_port = htons(8888);

serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)

{

printf("connect error !");

closesocket(sclient);

return 0;

}

char * sendData = "你好,TCP服务端,我是客户端!\n";

send(sclient, sendData, strlen(sendData), 0);

char recData[255];

int ret = recv(sclient, recData, 255, 0);

if(ret > 0)

{

recData[ret] = 0x00;

printf(recData);

}

closesocket(sclient);

WSACleanup();

return 0;

}

怎样修改成C程序能让mingw编译成功

------解决思路----------------------

注意c和c++语法上的细微区别

例如25行 sockaddr_in serAddr;改为

struct sockaddr_in serAddr;

别以为不用类,模板等c++的特性c和c++完全一样,他们语法有区别的,比如c++声明结构体变量时不用加struct,c必须加

另外c里面没有bool,我以前看到过有新手在c里声明bool变量...

------解决思路----------------------

还有35行,c的声明必须放在函数开头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值