MinGW WinSockets 编程

来源:互联网 发布:淘宝手机如何修改中评 编辑:程序博客网 时间:2024/06/10 00:43

前言:

大一的时候一个学长给我推荐MinGW(Minimalist GNUfor Windows) Developer Studio,后来就一直用了下去,感觉比VC++和DEV C好用,比VS更轻量级吧。

最近需要写一个简单的winsockets Client 来测试服务器,发现编译问题。

客户端代码:

#include <iostream>#include <winsock2.h>using namespace std;#pragma comment(lib, "ws2_32.lib")#define PORT 5154#define IP_ADDRESS "127.0.0.1"int main(int argc, char * argv[]){WSADATA Ws;SOCKET ClientSocket;struct sockaddr_in ServerAddr;int Ret = 0;int AddrLen = 0;HANDLE hThread = NULL;char SendBuffer[MAX_PATH];if (WSAStartup(MAKEWORD(2, 2), &Ws) != 0){cout << "Init Windows Socket Failed::" << GetLastError() << endl;return -1;}ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (ClientSocket == INVALID_SOCKET){cout << "Create Socket Failed::" << GetLastError() << endl;return -1;}ServerAddr.sin_family = AF_INET;ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);ServerAddr.sin_port = htons(PORT);memset(ServerAddr.sin_zero, 0x00, 8);Ret = connect(ClientSocket, (struct sockaddr*)&ServerAddr, sizeof(ServerAddr));if (Ret == SOCKET_ERROR){cout << "Connect Error::" << GetLastError() << endl;return -1;}while (true){cout << "Please input Message:"<<endl;cin.getline(SendBuffer, sizeof(SendBuffer));Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0);if (Ret == SOCKET_ERROR){cout << "Send Info Error::" << GetLastError() << endl;break;}}closesocket(ClientSocket);WSACleanup();return 0;}
简单分析一下代码:

1.WSAStartup完成Winsocket服务初始化

2.创建套接字

3.设置服务器网络参数

4.发起连接

5.发送数据

6.关闭套接字关闭Winsockets服务

这里出现的问题,在MinGW Studio下编译通过但是在Link(链接)的时候会报错:

undefined reference to `WSAStartup@8'

undefined reference to xxxxxxx

网上有这样的解决方案

在代码前面加上:

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

发现并没有什么作用。

后来得知,MinGW没有#pragma comment这样的预处理命令。


最终解决办法

project -> settings -> links -> Extra linking options 

加上:-lws2_32



0 0
原创粉丝点击