1. 程式人生 > >基於windows的簡單伺服器端和客戶端

基於windows的簡單伺服器端和客戶端

伺服器端套接字建立步驟:
1.呼叫socket函式建立套接字。
2.呼叫bind函式分配IP地址和埠號。
3.呼叫listen函式轉為可接收請求狀態。
4.呼叫該accept函式受理連線請求。

客戶端套接字建立步驟:
1.呼叫socket函式建立套接字。
2.呼叫connect函式向伺服器端傳送連線請求。

 

服務端:

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>

void ErrorHandling(char* message);

int main()
{
    WSADATA wsaData;
    SOCKET hServerSock, hClientSock;
    SOCKADDR_IN serverAddr, clientAddr;
    
int szClientAddr; char message[] = "hello world!"; int listenPort = 8000; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error."); hServerSock = socket(PF_INET, SOCK_STREAM, 0); if (hServerSock == INVALID_SOCKET) ErrorHandling("socket() error.
"); memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); serverAddr.sin_port = htons(listenPort); if (bind(hServerSock, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) ErrorHandling(
"bind() error."); if (listen(hServerSock, 5) == SOCKET_ERROR) ErrorHandling("listen() error."); szClientAddr = sizeof(clientAddr); hClientSock = accept(hServerSock, (SOCKADDR*)&clientAddr, &szClientAddr); if (hClientSock == INVALID_SOCKET) ErrorHandling("accept() error."); send(hClientSock, message, sizeof(message), 0); closesocket(hClientSock); closesocket(hServerSock); WSACleanup(); return 0; } void ErrorHandling(char* message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }

 

客戶端:

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>

void ErrorHandling(char* message);

int main()
{
    WSADATA wsaData;
    SOCKET hSocket;
    SOCKADDR_IN serverAddr;

    char message[30];
    int strLen;

    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
        ErrorHandling("WSAStartup() error.");

    hSocket = socket(PF_INET, SOCK_STREAM, 0);
    if (hSocket == INVALID_SOCKET)
        ErrorHandling("socket() error.");

    memset(&serverAddr, 0, sizeof(serverAddr));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serverAddr.sin_port = htons(8000);

    if (connect(hSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR)
        ErrorHandling("connect() error.");

    strLen = recv(hSocket, message, sizeof(message) - 1, 0);
    if (strLen == -1)
        ErrorHandling("read() error.");
    printf("Message recv: %s\n", message);

    closesocket(hSocket);
    WSACleanup();
    return 0;
}

void ErrorHandling(char* message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}