如何修复 "ws2_32.h" 未找到错误?
How can I fix "ws2_32.h" not found error?
我正在尝试在 windows 上的 codelite 中编写一个简单的套接字代码,但我无法导入 ws2_32.h,所以我的项目无法正常工作,并且我得到“没有这样的文件或目录”。我该如何解决这个问题 problem.I 试图在链接器选项中写这个但我不能 successful.I 研究了这样的问题但我不能 understand.This 是 Codelite 的新版本和不同的来自 others.I 我正在使用 MinGW 作为编译器。
编辑:
我删除了一个不必要和错误的库(#include“ws2_32.h”),当我将“-Iws2_32”添加到链接器选项时问题解决了。
#define _WINSOCK_DEPRECATED_NO_WARNINGS
//#ifndef WIN32_LEAN_AND_MEAN
//#define WIN32_LEAN_AND_MEAN
//#endif
#include <stdio.h>
#include <string.h>
#include "winsock2.h"
#include "ws2_32.h"
#include <WS2tcpip.h>
#define SERVER_BUF 10
#define SAME 0
#define G_BUF 1024
int main()
{
WSADATA wsa=NULL;
SOCKET s, new_socket;
char buf[SERVER_BUF];
char gbuf[G_BUF];
struct sockaddr_in server_information;
struct sockaddr_in client_information;
WSAStartup(MAKEWORD(2, 2), &wsa);
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
return 1;
}
printf("Initialised.\n");
server_information.sin_family = AF_INET;
server_information.sin_addr.s_addr = inet_addr("192.168.10.16");
server_information.sin_port = htons(8888);
s = socket(AF_INET, SOCK_STREAM, 0);
if (s != -1)
{
printf("Soket created...");
}
if (bind(s, (struct sockaddr*)&server_information, sizeof(server_information)) == SOCKET_ERROR)
{
printf("Bind failed with error code : %d", WSAGetLastError());
}
puts("Bind done");
while (s != 0) {
if (listen(s, 1) != -1)
{
printf("Listening is successful.");
}
socklen_t size = sizeof(client_information);
new_socket = accept(s, (struct sockaddr*)&client_information, &size);
if (new_socket == -1)
{
printf("Accept failed");
return -2;
}
else
puts("Connection accepted");
for (;;) {
int res = recv(new_socket, buf, SERVER_BUF, 0);
printf("amount of bytes received:%d\n", res);
puts(buf);
fgets(gbuf, G_BUF, stdin);
send(new_socket, gbuf,strlen(gbuf)+1, 0);
if (strcmp(buf, "exit") == SAME)
break;
}
}
return 0;
}
ws2_32
库对于 Windows 上的套接字功能确实是必需的。
所以你必须link带有-lws2_32
标志。
但是包含行应该是 #include <winsock2.h>
,并且 - 取决于您调用的函数 - 可能是 #include <ws2tcpip.h>
.
请注意,由于这些库被视为 Windows 上的系统包含文件,因此您应该使用尖括号 (<>
) 而不是双引号 (""
)。
我正在尝试在 windows 上的 codelite 中编写一个简单的套接字代码,但我无法导入 ws2_32.h,所以我的项目无法正常工作,并且我得到“没有这样的文件或目录”。我该如何解决这个问题 problem.I 试图在链接器选项中写这个但我不能 successful.I 研究了这样的问题但我不能 understand.This 是 Codelite 的新版本和不同的来自 others.I 我正在使用 MinGW 作为编译器。
编辑: 我删除了一个不必要和错误的库(#include“ws2_32.h”),当我将“-Iws2_32”添加到链接器选项时问题解决了。
#define _WINSOCK_DEPRECATED_NO_WARNINGS
//#ifndef WIN32_LEAN_AND_MEAN
//#define WIN32_LEAN_AND_MEAN
//#endif
#include <stdio.h>
#include <string.h>
#include "winsock2.h"
#include "ws2_32.h"
#include <WS2tcpip.h>
#define SERVER_BUF 10
#define SAME 0
#define G_BUF 1024
int main()
{
WSADATA wsa=NULL;
SOCKET s, new_socket;
char buf[SERVER_BUF];
char gbuf[G_BUF];
struct sockaddr_in server_information;
struct sockaddr_in client_information;
WSAStartup(MAKEWORD(2, 2), &wsa);
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
return 1;
}
printf("Initialised.\n");
server_information.sin_family = AF_INET;
server_information.sin_addr.s_addr = inet_addr("192.168.10.16");
server_information.sin_port = htons(8888);
s = socket(AF_INET, SOCK_STREAM, 0);
if (s != -1)
{
printf("Soket created...");
}
if (bind(s, (struct sockaddr*)&server_information, sizeof(server_information)) == SOCKET_ERROR)
{
printf("Bind failed with error code : %d", WSAGetLastError());
}
puts("Bind done");
while (s != 0) {
if (listen(s, 1) != -1)
{
printf("Listening is successful.");
}
socklen_t size = sizeof(client_information);
new_socket = accept(s, (struct sockaddr*)&client_information, &size);
if (new_socket == -1)
{
printf("Accept failed");
return -2;
}
else
puts("Connection accepted");
for (;;) {
int res = recv(new_socket, buf, SERVER_BUF, 0);
printf("amount of bytes received:%d\n", res);
puts(buf);
fgets(gbuf, G_BUF, stdin);
send(new_socket, gbuf,strlen(gbuf)+1, 0);
if (strcmp(buf, "exit") == SAME)
break;
}
}
return 0;
}
ws2_32
库对于 Windows 上的套接字功能确实是必需的。
所以你必须link带有-lws2_32
标志。
但是包含行应该是 #include <winsock2.h>
,并且 - 取决于您调用的函数 - 可能是 #include <ws2tcpip.h>
.
请注意,由于这些库被视为 Windows 上的系统包含文件,因此您应该使用尖括号 (<>
) 而不是双引号 (""
)。