Untitled

 avatar
unknown
plain_text
20 days ago
2.0 kB
4
Indexable
#include <winsock2.h>
#include <iostream>

#pragma comment(lib, "ws2_32.lib") // Không ảnh hưởng đến MinGW nhưng không cần thiết

int main()
{
    WSADATA wsaData;
    SOCKET ListeningSocket, NewConnection;
    SOCKADDR_IN ServerAddr, ClientAddr;
    int ClientAddrLen = sizeof(ClientAddr);
    int Port = 5150;

    // Khởi tạo Winsock
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        std::cerr << "WSAStartup failed!\n";
        return 1;
    }

    // Tạo socket
    ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ListeningSocket == INVALID_SOCKET) {
        std::cerr << "Socket creation failed!\n";
        WSACleanup();
        return 1;
    }

    // Thiết lập thông tin địa chỉ
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_port = htons(Port);
    ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);

    // Gắn socket với địa chỉ và cổng
    if (bind(ListeningSocket, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR) {
        std::cerr << "Bind failed!\n";
        closesocket(ListeningSocket);
        WSACleanup();
        return 1;
    }

    // Lắng nghe kết nối (cần thiết trước khi accept)
    if (listen(ListeningSocket, SOMAXCONN) == SOCKET_ERROR) {
        std::cerr << "Listen failed!\n";
        closesocket(ListeningSocket);
        WSACleanup();
        return 1;
    }

    std::cout << "Waiting for connections...\n";

    // Chấp nhận kết nối từ client
    NewConnection = accept(ListeningSocket, (SOCKADDR*)&ClientAddr, &ClientAddrLen);
    if (NewConnection == INVALID_SOCKET) {
        std::cerr << "Accept failed!\n";
        closesocket(ListeningSocket);
        WSACleanup();
        return 1;
    }

    std::cout << "Client connected!\n";

    // Đóng kết nối
    closesocket(NewConnection);
    closesocket(ListeningSocket);
    WSACleanup();
    return 0;
}
Editor is loading...
Leave a Comment