基础。 //Client.cpp #include <iostream> #include <Windows.h> #pragma comment(lib, "Ws2_32.lib") using namespace std; #define PORT 54321 #define IP_ADDRESS "192.168.1.101" #define MAX_BUF_SIZE 1472 int main(int argc, char* argv[]) { WSADATA Ws; SOCKET ClientSocket; struct sockaddr_in ServerAddr; int Ret = 0; int AddrLen = 0; char SendBuffer[MAX_BUF_SIZE]; //Init Windows Socket if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) { cout<<"Init Windows Socket Failed: "<<GetLastError()<<endl; return -1; } //Create Socket ClientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (INVALID_SOCKET == ClientSocket) { cout<<"Create Socket Failed: "<<GetLastError()<<endl; return -1; } BOOL bOptVal = TRUE; int bOptLen = sizeof(BOOL); Ret = setsockopt(ClientSocket, SOL_SOCKET, SO_BROADCAST, (char*)&bOptVal, bOptLen); if (SOCKET_ERROR == Ret) { cout<<"Connect Error: "<<GetLastError()<<endl; return -1; } ServerAddr.sin_family = AF_INET; ServerAddr.sin_addr.s_addr = INADDR_BROADCAST; ServerAddr.sin_port = htons(PORT); memset(ServerAddr.sin_zero, 0, sizeof(ServerAddr.sin_zero)); while (TRUE) { memset(SendBuffer, 0, sizeof(SendBuffer)); cin.getline(SendBuffer, sizeof(SendBuffer)); if (0 == SendBuffer[0]) { break; } int len = (int)strlen(SendBuffer); cout<<"len = "<<len<<endl; Ret = sendto(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0, (sockaddr*)&ServerAddr, sizeof(sockaddr)); if ( Ret == SOCKET_ERROR ) { cout<<"Send Info Error: "<<GetLastError()<<endl; return -1; } else { cout<<"broadcast: "<<SendBuffer<<" succeeded"<<endl; } } closesocket(ClientSocket); WSACleanup(); return 0; } //Server.cpp #include <iostream> #include <Windows.h> #pragma comment(lib, "Ws2_32.lib") using namespace std; #define PORT 54321 #define IP_ADDRESS "192.168.1.101" #define MAX_BUF_SIZE 1472 int main(int argc, char* argv[]) { WSADATA Ws; SOCKET ServerSocket; struct sockaddr_in LocalAddr, ClientAddr; int Ret = 0; int AddrLen = 0; char RecvBuffer[MAX_BUF_SIZE] = {0}; //Init Windows Socket if (WSAStartup(MAKEWORD(2,2), &Ws) != 0) { cout<<"Init Windows Socket Failed: "<<GetLastError()<<endl; return -1; } //Create Socket ServerSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (INVALID_SOCKET == ServerSocket) { cout<<"Create Socket Failed: "<<GetLastError()<<endl; return -1; } LocalAddr.sin_family = AF_INET; LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); LocalAddr.sin_port = htons(PORT); memset(LocalAddr.sin_zero, 0, sizeof(LocalAddr.sin_zero)); //Bind Socket Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr)); if (Ret != 0) { cout<<"Bind Socket Failed: "<<GetLastError()<<endl; return -1; } cout<<"broadcast listening......"<<endl; while (true) { AddrLen = sizeof(ClientAddr); while (true) { Ret = recvfrom(ServerSocket, RecvBuffer, sizeof(RecvBuffer), 0, (sockaddr*)&ClientAddr, &AddrLen); if (SOCKET_ERROR == Ret) { cout<<"RecvFrom Failed: "<<GetLastError()<<endl; return -1; } else { cout<<"RecvFrom "<<inet_ntoa(ClientAddr.sin_addr)<<"("<<ClientAddr.sin_port<<"): "<<RecvBuffer<<endl; } memset(RecvBuffer, 0, sizeof(RecvBuffer)); } } closesocket(ServerSocket); WSACleanup(); return 0; }