Untitled
unknown
plain_text
9 months ago
2.0 kB
7
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