Winsock is the standard Windows implementation of the Berkeley sockets API. It provides a programmatic interface for network communication. It supports both connection-oriented (TCP) and connectionless (UDP) protocols.
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
SOCKET ConnectSocket = INVALID_SOCKET;
struct sockaddr_in clientService;
char buffer[512];
int bytesSent, bytesRecv;
// Initialize Winsock
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("WSAStartup failed.\n");
return 1;
}
// Create a socket
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
// Set up the sockaddr_in structure
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("127.0.0.1"); // Target IP address
clientService.sin_port = htons(27015); // Target port
// Connect to the server
if (connect(ConnectSocket, (SOCKADDR *) &clientService, sizeof(clientService)) == SOCKET_ERROR) {
printf("connect failed: %ld\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
// Send data
char sendBuf[] = "Hello, Server!";
bytesSent = send(ConnectSocket, sendBuf, (int)strlen(sendBuf), 0);
if (bytesSent == SOCKET_ERROR) {
printf("send failed: %ld\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
printf("Bytes Sent: %ld\n", bytesSent);
// Receive data
bytesRecv = recv(ConnectSocket, buffer, 512, 0);
if (bytesRecv == SOCKET_ERROR) {
printf("recv failed: %ld\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
printf("Received: %.*s\n", bytesRecv, buffer);
// Clean up
closesocket(ConnectSocket);
WSACleanup();
return 0;
}