在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程序如下
怎样修改成C程序能让mingw编译成功
------解决思路----------------------
注意c和c++语法上的细微区别
例如25行 sockaddr_in serAddr;改为
struct sockaddr_in serAddr;
别以为不用类,模板等c++的特性c和c++完全一样,他们语法有区别的,比如c++声明结构体变量时不用加struct,c必须加
另外c里面没有bool,我以前看到过有新手在c里声明bool变量...
------解决思路----------------------
还有35行,c的声明必须放在函数开头
如题:在windows下用C语言写了关于socket的程序,用mingw无法编译成功(用gcc -o client1 client1.c -lws2_32),但是改成C++程序就可以(也没改程序内容,就是程序后缀是.cpp,用g++命令就可以编译成功),这是为什么?
client程序如下
#include <windows.h>
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#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的声明必须放在函数开头