windows下IPv6通訊(C++、MFC)
阿新 • • 發佈:2020-12-25
#include <stdio.h> #include <Ws2tcpip.h> #include <winsock2.h> #define HELLO_PORT 7905 #define HELLO_GROUP "224.0.0.1" #pragma comment(lib,"ws2_32.lib") using namespace std; int main() { WSADATA wsaData;//初始化 //初始化Socket WSAStartup(MAKEWORD(2, 2), &wsaData); sockaddr_in6 RecvAddr; //伺服器地址 sockaddr_in6 SenderAddr = { AF_INET6, htons(6060) }; //本地地址 char RecvBuf[1024];//傳送資料的緩衝區 int BufLen = 1024;//緩衝區大小 //建立接收資料報的socket SOCKET RecvSocket = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); bind(RecvSocket, (SOCKADDR*)&SenderAddr, sizeof(SenderAddr)); int SenderAddrSize = sizeof(RecvAddr); printf("服務的接收:\n"); while (1) { strcpy_s(RecvBuf, "hello"); int l_nLen = recvfrom(RecvSocket, RecvBuf,BufLen, 0, (SOCKADDR*)&RecvAddr, &SenderAddrSize); if (l_nLen < 0) { perror("傳送失敗"); exit(1); } printf("\nSend:"); for (int i = 0; i < strlen(RecvBuf); i++) { printf("%02x ", (UCHAR)RecvBuf[i]); } int l_nReadLen = sendto(RecvSocket, RecvBuf, strlen(RecvBuf), 0, (SOCKADDR*)&RecvAddr, SenderAddrSize); printf("\nread:"); for (int i = 0; i < l_nReadLen; i++) { printf("%02x ", RecvBuf[i]); } Sleep(1000); } //呼叫Recvfrom函式在繫結的socket上接收資料 //關閉socket,結束接收資料 closesocket(RecvSocket); //釋放資源,退出 WSACleanup(); return 0; }
Cilect
#include <stdio.h> #include <Ws2tcpip.h> #include <winsock2.h> #define HELLO_PORT 7905 #define HELLO_GROUP "224.0.0.1" #pragma comment(lib,"ws2_32.lib") using namespace std; int main() { WSADATA wsaData;//初始化 //初始化Socket WSAStartup(MAKEWORD(2, 2), &wsaData); sockaddr_in6 RecvAddr = { AF_INET6, htons(6060) }; //伺服器地址 inet_pton(AF_INET6, "fe80::4c09:7105:c377:4bc7", &RecvAddr.sin6_addr); //伺服器IP sockaddr_in6 SenderAddr = { AF_INET6, htons(7000) }; //本地地址 char SendBuf[1024]; //傳送資料的緩衝區 int BufLen = 1024; //緩衝區大小 //建立Socket物件 SOCKET SendSocket = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); bind(SendSocket, (SOCKADDR*)&SenderAddr, sizeof(SenderAddr)); int l_naddLen1 = sizeof(SenderAddr); printf("客戶端傳送:\n"); while (1) { strcpy_s(SendBuf, "hello"); int l_nLen = sendto(SendSocket, SendBuf, strlen(SendBuf), 0, (SOCKADDR*)&RecvAddr, sizeof(RecvAddr)); if (l_nLen < 0) { perror("傳送失敗"); exit(1); } printf("\nSend:"); for (int i = 0; i < strlen(SendBuf); i++) { printf("%02x ", (UCHAR)SendBuf[i]); } int l_nReadLen = recvfrom(SendSocket, SendBuf, BufLen, 0, (struct sockaddr*)&SenderAddr, &l_naddLen1); printf("\nread:"); for (int i = 0; i < l_nReadLen; i++) { printf("%02x ", SendBuf[i]); } Sleep(1000); } //傳送完成,關閉Socket closesocket(SendSocket); WSACleanup(); return 0; }