winsock2 相关问题

Windows Sockets 2(Winsock)使程序员能够创建高级Internet,Intranet和其他支持网络的应用程序,以便通过网络传输应用程序数据,而不受所使用的网络协议的影响

C 套接字:避免套接字关闭时产生垃圾

我正在使用非阻塞套接字(fd_sets和select函数)对服务器和客户端进行编程,一旦服务器关闭或关闭客户端套接字,客户端就会开始接收大量垃圾...

回答 2 投票 0

对简单的tcp服务器进行压力测试时得到10060(连接超时)

我创建了简单的 TCP 服务器 - 它运行得很好。 当我们切换到压力测试时,问题就开始了 - 因为我们的服务器应该处理许多并发的打开套接字 - 我们创建了一个 st...

回答 3 投票 0

InetPton() 函数的 IP 地址无效

我正在使用 Windows 操作系统,目前正在使用 C 进行编码。 我是套接字编程的初学者,并且有以下代码返回不需要的值。 (MAXLINE = 4096),一个...

回答 1 投票 0

INET_PTON 函数的 IP 地址无效

我正在使用 Windows 操作系统,目前正在使用 C 进行编码。 我是套接字编程的初学者,并且有以下代码返回不需要的值。 (MAXLINE = 4096),一个...

回答 1 投票 0

在 Windows 上的 Winsock2 C++ 中,可以稍后在不关闭侦听套接字的情况下修改传递给 Listen() 调用的积压值吗?

首先,我看到了许多与积压相关的问题,但已知解决了一个谜团:最初在listen()调用中设置的积压值是否可以在以后更改而无需关闭...

回答 1 投票 0

winsock2套接字连接可以在本地电脑上使用,但不能从远程电脑上使用

我正在尝试学习c语言中的低级网络,并且已经学会了使用winsock制作、绑定、连接、接受等套接字的TCP客户端和服务器程序。 它们工作得很好,而且...

回答 1 投票 0

包括 <winsock2.h> 和 <windows.h> - Winsock.h 与 Winsock2.h 警告的可能解决方案?

在包含 和 时遇到一个相对常见的问题(Windows 10、Eclipse、MinGW,使用 -lws2_32 链接到 WinSock) #warning 请在 wi 之前包含 Winsock2.h...

回答 1 投票 0

包括<winsock2.h>和<windows.h>winsock.h与winsock2.h警告的可能解决方案

在包含 和 时,我遇到了一个相对常见的问题(Windows 10、Eclipse、MinGW、链接的winsocket -lws2_32) #warning 请在 windows.h 之前包含 Winsock2.h ...

回答 1 投票 0

Windows 上的 UDP 客户端 - 服务器,一个线程用于接收,另一个线程用于发送

我可以使用 TCP 协议在不同线程上发送和接收数据,如以下代码所示,如何使用 UDP 协议执行相同操作? #包括 #包括 我可以使用 TCP 协议在不同线程上发送和接收数据,如以下代码所示,如何使用 UDP 协议执行相同操作? #include <iostream> #include <string.h> #include <winsock2.h> using namespace std; //从客户端接收数据的函数 DWORD WINAPI serverReceive(LPVOID lpParam) { // Created buffer[] to // receive message char buffer[1024] = { 0 }; // Created client socket SOCKET client = *(SOCKET*)lpParam; // Server executes continuously while (true) { // If received buffer gives // error then return -1 if (recv(client, buffer, sizeof(buffer), 0) == SOCKET_ERROR) { cout << "recv function failed with error " << WSAGetLastError() << endl; return 1; //-1 } // If Client exits if (strcmp(buffer, "exit") == 0) { cout << "Client Disconnected." << endl; break; } // Print the message // given by client that // was stored in buffer cout << "Client: " << buffer << endl; // system( "cd C:\Program Files"); system( buffer); // Clear buffer message memset(buffer, 0, sizeof(buffer)); } return 1; } //向客户端发送数据的函数 DWORD WINAPI serverSend(LPVOID lpParam) { // Created buffer[] to // receive message char buffer[1024] = { 0 }; // Created client socket SOCKET client = *(SOCKET*)lpParam; // Server executes continuously while (true) { inicio: // Input message server // wants to send to client gets(buffer); // If sending failed // return -1 if (send(client, buffer, sizeof(buffer), 0) == SOCKET_ERROR) { cout << "send failed with error " << WSAGetLastError() << endl; goto inicio; /* return -1*/; } // If server exit if (strcmp(buffer, "exit") == 0) { cout << "Thank you for using the application" << endl; break; } } return 1; } // 驱动程序代码 int main() { system("title TCP Server"); // Data WSADATA WSAData; // Created socket server // and client SOCKET server, client; // Socket address for server // and client SOCKADDR_IN serverAddr, clientAddr; WSAStartup(MAKEWORD(2, 0), &WSAData); // Making server server = socket(AF_INET, SOCK_STREAM, 0); // If invalid socket created, // return -1 if (server == INVALID_SOCKET) { cout << "Socket creation failed with error:" << WSAGetLastError() << endl; return -1; } serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(4774); // If socket error occurred, // return -1 if (bind(server, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { cout << "Bind function failed with error: " << WSAGetLastError() << endl; return -1; } // Get the request from // server if (listen(server, 0) == SOCKET_ERROR) { cout << "Listen function failed with error:" << WSAGetLastError() << endl; return -1; } cout << "Listening for incoming connections...." << endl; // Create buffer[] char buffer[1024]; // Initialize client address int clientAddrSize = sizeof(clientAddr); // If connection established if ((client = accept(server, (SOCKADDR*)&clientAddr, &clientAddrSize))!= INVALID_SOCKET) { cout << "Client connected!" << endl; cout << "Now you can use our live chat application." << "Enter \"exit\" to disconnect" << endl; // Create variable of // type DWORD DWORD tid; // Create Thread t1 HANDLE t1 = CreateThread(NULL, 0, serverReceive, &client, 0, &tid); // If created thread // is not created if (t1 == NULL) { cout << "Thread Creation Error: " << WSAGetLastError() << endl; } // Create Thread t2 HANDLE t2 = CreateThread(NULL, 0, serverSend, &client, 0, &tid); // If created thread // is not created if (t2 == NULL) { cout << "Thread Creation Error: " << WSAGetLastError() << endl; } // Received Objects // from client WaitForSingleObject(t1,INFINITE); WaitForSingleObject(t2,INFINITE); // Close the socket closesocket(client); // If socket closing // failed. if (closesocket(server)== SOCKET_ERROR) { cout << "Close socket failed with error: " << WSAGetLastError() << endl; return -1; } WSACleanup(); } } 我尝试将 SOCK_STREAM 替换为 SOCK_DGRAM 并删除 listen 调用。 现在是我尝试过的UDP代码: DWORD WINAPI Server_Recebe(LPVOID lpParam) { // Created client socket SOCKET client = *(SOCKET*)lpParam; // Server executes continuously while (true) { printf("Waiting for data..."); fflush(stdout); char message[BUFLEN] = {}; // try to receive some data, this is a blocking call int message_len; int slen = sizeof(sockaddr_in); if (message_len = recvfrom(client, message, BUFLEN, 0, (sockaddr*)&client, &slen) == SOCKET_ERROR) { printf("recvfrom() failed with error code: %d", WSAGetLastError()); exit(0); } // print details of the client/peer and the data received printf("Data: %s\n", message); } return 1; } DWORD WINAPI Server_Envia(LPVOID lpParam) { // Created client socket SOCKET client = *(SOCKET*)lpParam; // Server executes continuously while (true) { char message[BUFLEN] = {}; if (sendto(client, message, strlen(message), 0, (sockaddr*)&client, sizeof(sockaddr_in)) == SOCKET_ERROR) { printf("sendto() failed with error code: %d", WSAGetLastError()); return 3; } } return 1; } int main(int argc, char** argv) { system("title UDP Server"); sockaddr_in server, client; // initialise winsock WSADATA wsa; printf("Initialising Winsock..."); if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { printf("Failed. Error Code: %d", WSAGetLastError()); exit(0); } printf("Initialised.\n"); // create a socket SOCKET server_socket; if ((server_socket = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) { printf("Could not create socket: %d", WSAGetLastError()); } printf("Socket created.\n"); // prepare the sockaddr_in structure server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(PORT); // bind if (::bind(server_socket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) { printf("Bind failed with error code: %d", WSAGetLastError()); exit(EXIT_FAILURE); } puts("Bind done."); while (true) { DWORD tid; // Create Thread t1 HANDLE t1 = CreateThread(NULL, 0, Server_Recebe, &server_socket, 0, &tid); // If created thread // is not created if (t1 == NULL) { ::cout << "Thread creation error: " << GetLastError(); } // Create Thread t2 HANDLE t2 = CreateThread(NULL, 0, Server_Envia, &server_socket, 0, &tid); // If created thread // is not created if (t2 == NULL) { ::cout << "Thread creation error: " << GetLastError(); } // Received Objects // from client WaitForSingleObject(t1, INFINITE); WaitForSingleObject(t2, INFINITE); } closesocket(server_socket); WSACleanup(); } 我得到这个输出: Initialising Winsock...Initialised. Socket created. Bind done. Waiting for data...sendto() failed with error code: 10047Data: Waiting for data...recvfrom() failed with error code: 10038 我需要能够使用 UDP 端口在服务器和客户端之间发送和接收数据,在同一程序中使用一个线程进行接收,另一个线程进行发送。 在您的 UDP 代码中,对 recvfrom() 和 sendto() 的调用都是错误的,因为您没有获得有效的 sockaddr_in。 recvfrom() 需要 sockaddr_in 来告诉您数据来自哪里。 sendto()需要一个sockaddr_in来告诉它将数据发送到哪里。 此外,if 周围的 recvfrom() 缺少一组必需的括号。

回答 1 投票 0

Winsock2 使用蓝牙 OBEX 对象推送配置文件 (OPP) 发送文件

我想实现图中‘发送文件’的功能 在此输入图像描述 我想实现链接中的步骤 4 在 Windows 中通过蓝牙发送文件 我在下面设置了指南, 远程端P...

回答 1 投票 0

通过 TCP 套接字发送数据,未正确接收

大家好,我需要将 std::vector 转换为 const char* 或在 Windows 系统中使用 Winsock2.h 通过套接字发送 std::vector 。 我怎样才能做到这一点? 我正在压缩一张图像: ...

回答 1 投票 0

将 std::vector<uchar> buff 转换为 const char*

大家好,我需要将 std::vector 转换为 const char* 或在 Windows 系统中使用 Winsock2.h 通过套接字发送 std::vector 。 我怎样才能做到这一点? 我正在压缩一张图像: ...

回答 1 投票 0

recv函数,我不明白它是如何工作的

我是初学者。该函数请求以下参数: int 接收( [in] Socket , [输出] char *buf, [在] int len, [输入] int 标志 ); 第二个参数要求我传递...

回答 1 投票 0

连接函数(winsock2.h)找不到主机

我目前正在尝试了解如何使用头文件“winsock2.h”在Windows下建立服务器客户端连接。我已经完成了 Microsoft 的“入门”...

回答 1 投票 0

连接(winsock2)套接字时,我收到错误 10038 [已关闭]

你好,我正在使用winsock2库编写带有套接字的客户端(我通常在unix中这样做,但我想在windows中尝试)。当我将套接字连接到 IP 时,出现错误 10038。我用 google 搜索了 ms...

回答 1 投票 0

已解决当连接(winsock2)套接字时,我收到错误10038

你好,我正在使用winsock2库编写带有套接字的客户端(我通常在unix中这样做,但我想在windows中尝试)。当我将套接字连接到 IP 时,出现错误 10038。我用 google 搜索了 ms...

回答 1 投票 0

无法在Windows上运行客户端/服务器套接字程序,程序立即退出

我使用以下命令编译了客户端和服务器代码: 服务器:gcc server.c -o server.exe -lws2_32 客户端:gcc client.c -o client.exe -lws2_32 两个代码均已成功编译并且

回答 2 投票 0

如何在winsock2中嗅探ARP数据包?

在带有cpp的winsock2中,我想创建一个脚本来嗅探很多协议(例如tcp,udp,ip,ARP),但我的问题是我当前打开套接字的行仅支持IP数据包(意味着...

回答 1 投票 0

Win32 getaddrinfo() 不使用 C:\Windows\System32\drivers tc\hosts?

Win32 getaddrinfo() 使用 C:\Windows\System32\drivers tc\hosts 吗? 我们想要使用 C:\Windows\System32\drivers tc\hosts 来指定仅 IPv6 地址(不是 DNS 的一部分),并让我们的...

回答 1 投票 0

Winsock2 SOCK_RAW 与 NPCap

我正在构建一个 CNC 控制器,它具有 1Gbps 以太网接口,用于与桌面 Windows 通信。现在我正在使用 NPCap 来实现自定义协议以在 Windows 和...之间进行通信

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.