MSDN – Windows Networking Examples

Sample Code Snippets

Get Local IP Address (C++)
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>

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

int main() {
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2), &wsaData);

    char hostname[256];
    gethostname(hostname, sizeof(hostname));

    addrinfo hints = {}, *res;
    hints.ai_family = AF_UNSPEC;
    getaddrinfo(hostname, nullptr, &hints, &res);

    for (addrinfo* ptr = res; ptr != nullptr; ptr = ptr->ai_next) {
        char ipstr[INET6_ADDRSTRLEN];
        void* addr;
        if (ptr->ai_family == AF_INET) { // IPv4
            sockaddr_in* ipv4 = (sockaddr_in*)ptr->ai_addr;
            addr = &(ipv4->sin_addr);
        } else { // IPv6
            sockaddr_in6* ipv6 = (sockaddr_in6*)ptr->ai_addr;
            addr = &(ipv6->sin6_addr);
        }
        inet_ntop(ptr->ai_family, addr, ipstr, sizeof ipstr);
        std::cout << "IP: " << ipstr << std::endl;
    }

    freeaddrinfo(res);
    WSACleanup();
    return 0;
}
Create a TCP Server (C++)
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>

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

int main() {
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,2), &wsa);

    SOCKET listenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    sockaddr_in service{};
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = INADDR_ANY;
    service.sin_port = htons(5150);

    bind(listenSock, (SOCKADDR*)&service, sizeof(service));
    listen(listenSock, 5);
    std::cout << "Server listening on port 5150..." << std::endl;

    SOCKET client = accept(listenSock, nullptr, nullptr);
    const char* msg = "Hello from Windows Server!\r\n";
    send(client, msg, (int)strlen(msg), 0);
    closesocket(client);
    closesocket(listenSock);
    WSACleanup();
    return 0;
}
Ping Host (PowerShell)
# PowerShell script to ping a host repeatedly
param(
    [string]$Host = "8.8.8.8",
    [int]$Count = 4
)

for ($i=1; $i -le $Count; $i++) {
    $reply = Test-Connection -ComputerName $Host -Count 1 -Quiet
    if ($reply) {
        Write-Host ("Reply from {0}: time={1}ms" -f $Host, (Measure-Command { Test-Connection -ComputerName $Host -Count 1 }).TotalMilliseconds)
    } else {
        Write-Host "Request timed out."
    }
    Start-Sleep -Seconds 1
}
Asynchronous Winsock I/O (C++)
#include <winsock2.h>
#include <ws2tcpip.h>
#include <mswsock.h>
#include <iostream>

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

void CALLBACK CompletionRoutine(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags) {
    std::cout << "Async send completed, bytes sent: " << cbTransferred << std::endl;
    // Cleanup
    delete lpOverlapped;
}

int main() {
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,2), &wsa);

    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    sockaddr_in server{};
    server.sin_family = AF_INET;
    server.sin_port = htons(5150);
    inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);
    connect(s, (SOCKADDR*)&server, sizeof(server));

    const char* msg = "Async hello";
    WSABUF buf{};
    buf.buf = const_cast(msg);
    buf.len = (ULONG)strlen(msg);

    WSAOVERLAPPED* overlapped = new WSAOVERLAPPED{};
    WSASend(s, &buf, 1, nullptr, 0, overlapped, CompletionRoutine);

    std::cout << "Waiting for async send..." << std::endl;
    SleepEx(INFINITE, TRUE); // Wait for I/O completion

    closesocket(s);
    WSACleanup();
    return 0;
}
Enumerate Network Interfaces (C#)
using System;
using System.Net.NetworkInformation;

class Program {
    static void Main() {
        foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) {
            Console.WriteLine($"\nName: {ni.Name}");
            Console.WriteLine($"Description: {ni.Description}");
            Console.WriteLine($"Status: {ni.OperationalStatus}");
            Console.WriteLine($"MAC: {ni.GetPhysicalAddress()}");
            foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses) {
                Console.WriteLine($"IP: {ip.Address}");
            }
        }
    }
}