user-0 提问: 关于Linux C 与window C 的网络编程 

回复:
user: user-0
content: 恩，我在visual studio 上跑起来了，不过用文件的扩展名用的   。cpp   ，我没学过，C++ ,   和C语言有严格的区分吗

user: user-1
content: 引用 12 楼 a962443153 的回复:SXJIAKE  谢谢了，大神， 好几天没上一直没有回复  这。。。。。。VC6 太老，c 代码不支持 C99/C11 随用随声明。可以稍微改改，把所有声明提前到该语句块的顶部。另外，我还忘了一个重要的事，winsock 之类的头文件需要放在 windows.h 之前，否则可能导致各种声明冲突错误。 #include <stdio.h> #include <stdlib.h>    #define WIN32_LEAN_AND_MEAN #define WINVER 0x0501  #include <winsock2.h>   #include <windows.h> #pragma comment(lib, "ws2_32.lib")   int main(int argc, char *argv[]) {     SOCKET sockfd = 0;     WSADATA wsaData = { 0 };      int ret = WSAStartup(MAKEWORD(1, 1), &wsaData);     if (ret != 0) {         return (-1);     }       sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);     if (sockfd != INVALID_SOCKET) {         char data[32] = { 0 };         char buf[32] = { 0 };         struct sockaddr_in addr = { 0 };          // 主机         struct hostent *host = gethostbyname("bbs.csdn.net");         addr.sin_family = AF_INET;         // 端口         addr.sin_port = htons(80);         addr.sin_addr.s_addr = *((unsigned long*)*host->h_addr_list);         // connect         connect(sockfd, (SOCKADDR*)&addr, sizeof(addr));         // send         send(sockfd, data, sizeof(data), 0);         // recv         recv(sockfd, buf, sizeof(buf), 0);          closesocket(sockfd);     }      WSACleanup();       return 0; }这个代码只是例子，具体的还得你自己添加内容。

user: user-0
content: SXJIAKE  谢谢了，大神， 好几天没上一直没有回复  这。。。。。。

user: user-2
content: 初学者，还是别乱用 你看看boost asio  那个对于你的思想很重要  然后自己就可以写一个了

user: user-0
content: 其实网络编程的流程 我知道 ，socket ——  bind —— listen —— accept—— send / recv  就是不知道这几个函数在windows下还能不能用 ？ 都需要什么头文件 ？ VC++的库里都有吗　？

user: user-1
content: #include <stdio.h> #include <stdlib.h>   #define WIN32_LEAN_AND_MEAN #define WINVER 0x0501   #include <windows.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib")  int main(int argc, char *argv[]) {     WSADATA wsaData = { 0 };     int ret = WSAStartup(MAKEWORD(1, 1), &wsaData);     if (ret != 0) {         return (-1);     }      SOCKET sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);     if (sockfd != INVALID_SOCKET) {         struct hostent *host = gethostbyname("bbs.csdn.net");         struct sockaddr_in addr = { 0 };         addr.sin_family = AF_INET;         addr.sin_port = htons(80);         addr.sin_addr.s_addr = *((unsigned long*)*host->h_addr_list);         // connect         connect(sockfd, (SOCKADDR*)&addr, sizeof(addr));         // send         char data[32] = { 0 };         send(sockfd, data, sizeof(data), 0);         // recv         char buf[32] = { 0 };         recv(sockfd, buf, sizeof(buf), 0);          closesocket(sockfd);     }      WSACleanup();      return 0; }

user: user-1
content: 引用 8 楼 a962443153 的回复:其实网络编程的流程 我知道 ，socket ——  bind —— listen —— accept—— send / recv  就是不知道这几个函数在windows下还能不能用 ？ 都需要什么头文件 ？ VC++的库里都有吗　？　　都能用的，例子：#include <stdio.h> #include <stdlib.h>   #define WIN32_LEAN_AND_MEAN #define WINVER 0x0501   #include <windows.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib")  int main(int argc, char *argv[]) {     WSADATA wsaData = { 0 };     int ret = WSAStartup(MAKEWORD(1, 1), &wsaData);     if (ret != 0) {         return (-1);     }      SOCKET sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);     if (sockfd != INVALID_SOCKET) {             struct hostent *host = gethostbyname("bbs.csdn.net");             struct sockaddr_in addr = { 0 };             addr.sin_family = AF_INET;             addr.sin_port = htons(80);             addr.sin_addr.s_addr = *((unsigned long*)*host->h_addr_list);             // connect             connect(sockfd, (SOCKADDR*)&addr, sizeof(addr));             // send             char data[32] = { 0 };             send(sockfd, data, sizeof(data), 0);             // recv             char buf[32] = { 0 };             recv(sockfd, buf, sizeof(buf), 0);         }         closesocket(sockfd);     }      WSACleanup();      return 0; }

user: user-3
content: 说“跨平台一定比不跨平台好”就和说“双性恋一定比异性恋好”一样！

user: user-1
content: Windows 的 API 绝大多数都是单词首字母大写命名，如：GetWindowText、CreateWindowEx 等。但对于网络编程这部分，据说早期也是抄袭 UNIX 的，因此包括名称和参数绝大多数是一样的，即全小写的命名风格。但还是有细微差别，如：close、ioctl 在 Windows 下用 closesocket、ioctlsocket 代替。现在开发 Windows Socket 程序需调用 WSAStartup 启动 Socket 库，WSACleanup 来关闭。Windows 程序员都知道，Windows API 只要是涉及到字符串参数的，大都分为两个版本，如 GetWindowTextA、GetWindowTextW，可能微软为了保持统一，在新版的系统中又推出了新的 Socket API，最初的一批是推出 Unicode 版本，如 GetHostNameW、GetNameInfoW，然而 ANSI 版还是 gethostname、getnameinfo，不过后来又推出新的一套 WSA 前缀的，比如 WSAConnet、WSAAccept，不过每个系列 API 也不完全涵盖。觉得微软这样越想统一越是乱套。既然你是 Linux 下编程的，那大多用的是纯 C 代码，如果你下载的是 C++ 封装的那几乎是不能用的。可以下载飞鸽的源代码学习一下，点击这里下载，这个也是 C++ 的进行了简单封装。

user: user-4
content: windows的跟linux的区别其实并不大，思想都是一样的，只 不过windows下的socket编程，在最前面会有一个初始化的操作，剩下的都一样 服务端                         客户端 1 创建socket            1 创建socket 2 绑定                        2 连接 3 监听 4 接受 发送接受消息，关闭连接

user: user-5
content: 我也推荐用boost asio，简单强大，用ace太复杂了

user: user-6
content: 应该用框架或组件，一套统一API，屏蔽各平台差异。 如Boost.Asio.

user: user-7
content: 可以参考这个 http://blog.csdn.net/tpriwwq/article/details/17682141

user: user-8
content: 函数几乎一样，逻辑完全一样，不应该有困难