user-0 提问: 网络编程遇到的问题

回复:
user: user-1
content: 非要在Windows下用gcc，有两种办法： ①使用cygwin ②使用虚拟机（Hyper-V或VMWare或VirtualBox）下的Linux 个人推荐使用方法②

user: user-1
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 楼主，个人认为，你用gcc编译代码，那就应该是linux c/c++系统中的网络编程，它们有相关的头文件和库文件的，而你上面给出来的代码是加入的Windows平台的网络编程头文件和库文件来的，最好还是使用vs系列编写网络程序好~~~这样省很多麻烦~~~~ vs2008以上都可以吧~~~

user: user-0
content: 引用 4 楼 weixin_36010922 的回复:[quote=引用 2 楼 sghcpt 的回复:] [quote=引用 楼主 weixin_36010922 的回复:] 各位大神好，我win7 用gcc 来网络编程，遇到的问题如下：  求教大神，这个错误是啥原因？并且#pragma comment (lib,"ws2_32.lib")  这里面的两个参数个代表什么意思？  楼主，这些#include <winsock2.h>头文件还有Ws2_32.lib这些库文件都是windows平台的，你用gcc能编译通过？gcc应该没有这些文件的吧~~ #pragma comment(lib,"Ws2_32.lib") 表示链接Ws2_32.lib这个库这些操作都是windows平台的操作吧？是否用错编译器了？应该用vs版本的编译器才对吧？[/quote] 求大神推荐个编译器，win7系统。[/quote] 这是我在系统文件中找到的 是不是引入的路经不对？

user: user-0
content: 引用 2 楼 sghcpt 的回复:[quote=引用 楼主 weixin_36010922 的回复:] 各位大神好，我win7 用gcc 来网络编程，遇到的问题如下：  求教大神，这个错误是啥原因？并且#pragma comment (lib,"ws2_32.lib")  这里面的两个参数个代表什么意思？  楼主，这些#include <winsock2.h>头文件还有Ws2_32.lib这些库文件都是windows平台的，你用gcc能编译通过？gcc应该没有这些文件的吧~~ #pragma comment(lib,"Ws2_32.lib") 表示链接Ws2_32.lib这个库这些操作都是windows平台的操作吧？是否用错编译器了？应该用vs版本的编译器才对吧？[/quote] 求大神推荐个编译器，win7系统。

user: user-0
content: 引用 1 楼 user-3 的回复:lz的参考书代码不完整 看个简单示例  	// 加载套接字库 	WSAData wsaData; 	if(0 != WSAStartup(MAKEWORD(2,2), &wsaData)) 	{ 		return; 	} 	if(2 != LOBYTE(wsaData.wVersion) || 	   2 != HIBYTE(wsaData.wVersion)) 	{ 		// 终止对套接字库的使用 		WSACleanup(); 		return; 	}   	// 创建用于监听的套接字 	SOCKET sockListen = socket(AF_INET, SOCK_STREAM, 0);   	// 绑定监听套接字到某个本地地址信息结构体 	SOCKADDR_IN addrSrv; 	addrSrv.sin_family = AF_INET; 	addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 	addrSrv.sin_port = htons(6000); 	bind(sockListen, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR));   	// 将监听套接字设为监听模式，准备接收客户请求 	listen(sockListen, 6);   	// 处理客户请求 	SOCKADDR_IN addrClient; 	int len = sizeof(SOCKADDR); 	while(1) 	{ 		// 等待客户请求的到来 		// 每次接收到客户请求后，返回对应本次连接的套接字 		// 建立连接后，就可以使用返回的套接字与客户端进行通信了 		SOCKET sockSrv = accept(sockListen, (SOCKADDR *)&addrClient, &len); 		 		// 发送数据 		char sendBuf[100]; 		sprintf(sendBuf, "Welcome %s to http://www.communication.org", inet_ntoa(addrClient.sin_addr)); 		send(sockSrv, sendBuf, strlen(sendBuf) + 1, 0);   		// 接收数据 		char recvBuf[100]; 		recv(sockSrv, recvBuf, sizeof(recvBuf), 0); 		printf("%s\n", recvBuf);   		// 关闭本次连接的套接字 		closesocket(sockSrv); 	}   	// 终止对套接字库的使用 	WSACleanup();    #pragma   comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库。    和在工程设置里添加链入Ws2_32.lib效果一样 原来这些都有的，由于报错 我都删了....。  一旦引用    SOCKET slisten=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 就会报错..

user: user-2
content: 引用 楼主 weixin_36010922 的回复:各位大神好，我win7 用gcc 来网络编程，遇到的问题如下：  求教大神，这个错误是啥原因？并且#pragma comment (lib,"ws2_32.lib")  这里面的两个参数个代表什么意思？  楼主，这些#include <winsock2.h>头文件还有Ws2_32.lib这些库文件都是windows平台的，你用gcc能编译通过？gcc应该没有这些文件的吧~~ #pragma comment(lib,"Ws2_32.lib") 表示链接Ws2_32.lib这个库这些操作都是windows平台的操作吧？是否用错编译器了？应该用vs版本的编译器才对吧？

user: user-3
content: lz的参考书代码不完整 看个简单示例  	// 加载套接字库 	WSAData wsaData; 	if(0 != WSAStartup(MAKEWORD(2,2), &wsaData)) 	{ 		return; 	} 	if(2 != LOBYTE(wsaData.wVersion) || 	   2 != HIBYTE(wsaData.wVersion)) 	{ 		// 终止对套接字库的使用 		WSACleanup(); 		return; 	}   	// 创建用于监听的套接字 	SOCKET sockListen = socket(AF_INET, SOCK_STREAM, 0);   	// 绑定监听套接字到某个本地地址信息结构体 	SOCKADDR_IN addrSrv; 	addrSrv.sin_family = AF_INET; 	addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 	addrSrv.sin_port = htons(6000); 	bind(sockListen, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR));   	// 将监听套接字设为监听模式，准备接收客户请求 	listen(sockListen, 6);   	// 处理客户请求 	SOCKADDR_IN addrClient; 	int len = sizeof(SOCKADDR); 	while(1) 	{ 		// 等待客户请求的到来 		// 每次接收到客户请求后，返回对应本次连接的套接字 		// 建立连接后，就可以使用返回的套接字与客户端进行通信了 		SOCKET sockSrv = accept(sockListen, (SOCKADDR *)&addrClient, &len); 		 		// 发送数据 		char sendBuf[100]; 		sprintf(sendBuf, "Welcome %s to http://www.communication.org", inet_ntoa(addrClient.sin_addr)); 		send(sockSrv, sendBuf, strlen(sendBuf) + 1, 0);   		// 接收数据 		char recvBuf[100]; 		recv(sockSrv, recvBuf, sizeof(recvBuf), 0); 		printf("%s\n", recvBuf);   		// 关闭本次连接的套接字 		closesocket(sockSrv); 	}   	// 终止对套接字库的使用 	WSACleanup();    #pragma   comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库。    和在工程设置里添加链入Ws2_32.lib效果一样

user: user-0
content: 引用 6 楼 sghcpt 的回复:楼主，个人认为，你用gcc编译代码，那就应该是linux c/c++系统中的网络编程，它们有相关的头文件和库文件的，而你上面给出来的代码是加入的Windows平台的网络编程头文件和库文件来的，最好还是使用vs系列编写网络程序好~~~这样省很多麻烦~~~~ vs2008以上都可以吧~~~ 谢谢，我安个虚拟机跑linux系统吧

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:非要在Windows下用gcc，有两种办法： ①使用cygwin ②使用虚拟机（Hyper-V或VMWare或VirtualBox）下的Linux 个人推荐使用方法② 好的 准备安装linux虚拟机，谢谢老师