您的位置:首页 > 运维架构 > Linux

socket C/C++编程(3)Windows&Linux之socket兼容性编程

2017-08-11 17:26 615 查看
1. Windows socket依赖库”ws2_32.lib”编译

1.0. 创建工程

VS2012创建VC++“win32”空项目到共享目录\192.168.1.100\sharedcode



- 1.1. 加载windows 网络库”ws2_32.lib”

点击“项目”,右键“属性”,选中“链接器”,选中“输入”,附加依赖项目的最前面添加 ”ws2_32.lib”,保存

- 1.2. 添加新文件”test.cpp”

#include <windows.h>
int main(int argc, char *argv[]){

// 初始化”ws2_32.lib”
WSADATA ws;
WSAStartup(MAKEWORD(2,2), &ws);

return 0;
}


- 1.3. windows网络库”ws2_32.lib”编译成功



2. Windows socket编程

- 2.1. 不关闭socket(test.cpp)

#include <windows.h>
#include <stdio.h>

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

// 初始化”ws2_32.lib”
WSADATA ws;
WSAStartup(MAKEWORD(2,2), &ws);

// 创建SOCKET(windows tcpip协议, 之tcp协议)
for(int i=0; i<100; i++){

int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock == -1){
printf("create sock error!\n");
return -1;
}
else{
printf("create sock successfully, socket id: %d\n", sock);
}
}
return 0;
}




- 2.2. 关闭socket(test.cpp)

#include <windows.h>
#include <stdio.h>

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

// 初始化”ws2_32.lib”
WSADATA ws;
WSAStartup(MAKEWORD(2,2), &ws);

// 创建SOCKET(windows tcpip协议, 之tcp协议)
for(int i=0; i<100; i++){

int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock == -1){
printf("create sock error!\n");
return -1;
}
else{
printf("create sock successfully, socket id: %d\n", sock);
// 每次打印成功后都关闭socket
closesocket(sock);
}
}
return 0;
}




3. Linux socket编程

- 3.1. 不关闭socket(test.cpp)

#include <windows.h>
#include <stdio.h>

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

// 初始化”ws2_32.lib”
WSADATA ws;
WSAStartup(MAKEWORD(2,2), &ws);

// 创建SOCKET(windows tcpip协议, 之tcp协议)
for(int i=0; i<100; i++){

int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock == -1){
printf("create sock error!\n");
return -1;
}
else{
printf("create sock successfully, socket id: %d\n", sock);
}
}
return 0;
}




- 3.2. 关闭socket(test.cpp)

#ifdef WIN32
#include <windows.h>
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#endif

#include <stdio.h>

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

#ifdef WIN32
// 初始化”ws2_32.lib”
WSADATA ws;
WSAStartup(MAKEWORD(2,2), &ws);
#endif

// 创建SOCKET(windows tcpip协议, 之tcp协议)
for(int i=0; i<100; i++){

int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock == -1){
printf("create sock error!\n");
return -1;
}
else{
printf("create sock successfully, socket id: %d\n", sock);
#ifdef WIN32
// 每次打印成功后都关闭socket
closesocket(sock);
#else
close(sock);
#endif

}
}
return 0;
}




4. 另外

linux上有
ulimit
等参数的限制,值得进一步研究;

查找依赖的头文件,查找windows API命令:
msdn
查找linux API 命令:
man
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: