Compare commits
3 Commits
main
...
winsock_te
Author | SHA1 | Date |
---|---|---|
|
861bbd0a4c | ago%!(EXTRA string=1 year) |
|
45aab99712 | ago%!(EXTRA string=1 year) |
|
be52ba2285 | ago%!(EXTRA string=1 year) |
9 changed files with 252 additions and 0 deletions
@ -0,0 +1,7 @@ |
||||
.vs |
||||
**Makefile |
||||
**vcxproj |
||||
**.vcxproj.filters |
||||
*sln |
||||
bin |
||||
bin-int |
@ -0,0 +1,13 @@ |
||||
project "bakanet" |
||||
kind "StaticLib" |
||||
language "C++" |
||||
cppdialect "C++17" |
||||
systemversion "latest" |
||||
|
||||
targetdir ("bin/" .. outputdir .. "/%{prj.name}") |
||||
objdir ("bin-int/" .. outputdir .. "/%{prj.name}") |
||||
|
||||
files { |
||||
"src/**.h", |
||||
"src/**.cpp" |
||||
} |
@ -0,0 +1 @@ |
||||
#pragma once |
@ -0,0 +1,32 @@ |
||||
workspace "winsock_test" |
||||
architecture "x64" |
||||
|
||||
configurations |
||||
{ |
||||
"Debug", |
||||
"Release" |
||||
} |
||||
|
||||
-- startproject "winsock_test" |
||||
|
||||
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}" |
||||
|
||||
-- Include projects |
||||
include "bakanet" |
||||
include "sandbox/client" |
||||
include "sandbox/server" |
||||
|
||||
newaction { |
||||
trigger = "clean", |
||||
description = "Clean the build", |
||||
execute = function() |
||||
print("Cleaning...") |
||||
os.rmdir("./bin") |
||||
os.rmdir("./bin-int") |
||||
os.remove("**.sln") |
||||
os.remove("**.vcxproj") |
||||
os.remove("**.vcxproj.filters") |
||||
print("Done.") |
||||
end |
||||
} |
||||
|
@ -0,0 +1,15 @@ |
||||
project "client" |
||||
kind "ConsoleApp" |
||||
language "C++" |
||||
cppdialect "C++17" |
||||
systemversion "latest" |
||||
|
||||
targetdir ("bin/" .. outputdir .. "/%{prj.name}") |
||||
objdir ("bin-int/" .. outputdir .. "/%{prj.name}") |
||||
|
||||
files { |
||||
"src/**.h", |
||||
"src/**.cpp" |
||||
} |
||||
|
||||
links { "bakanet"} |
@ -0,0 +1,68 @@ |
||||
#include <iostream> |
||||
#include <Ws2tcpip.h> |
||||
#include <WinSock2.h> |
||||
#include <tchar.h> |
||||
|
||||
|
||||
#pragma comment(lib,"WS2_32.lib") |
||||
|
||||
int main() |
||||
{ |
||||
WSADATA wsaData; |
||||
int err; |
||||
|
||||
err = WSAStartup(MAKEWORD(2, 2), &wsaData); |
||||
|
||||
if (err != 0) |
||||
{ |
||||
std::cout << "Winsock DDL not found!" << std::endl; |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
//client socket
|
||||
SOCKET sock; |
||||
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); |
||||
|
||||
if (sock == INVALID_SOCKET) |
||||
{ |
||||
std::cout << "Invalid client socker: " + WSAGetLastError() << std::endl; |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
//conf socket
|
||||
sockaddr_in service; |
||||
service.sin_family = AF_INET; |
||||
InetPton(AF_INET, _T("127.0.0.1"), &service.sin_addr.s_addr); |
||||
service.sin_port = htons(25580); |
||||
|
||||
//connect to serv
|
||||
if (connect(sock, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR) |
||||
{ |
||||
std::cout << "Failed to connect to the server: " + WSAGetLastError() << std::endl; |
||||
closesocket(sock); |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
//send message to serv
|
||||
std::string message = "Hello server!"; |
||||
if (send(sock, message.c_str(), message.length(), 0) == SOCKET_ERROR) |
||||
{ |
||||
std::cout << "Failed to send messaage to the server: " + WSAGetLastError() << std::endl; |
||||
closesocket(sock); |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
std::cout << "All good :)" << std::endl; |
||||
closesocket(sock); |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
@ -0,0 +1,15 @@ |
||||
project "server" |
||||
kind "ConsoleApp" |
||||
language "C++" |
||||
cppdialect "C++17" |
||||
systemversion "latest" |
||||
|
||||
targetdir ("bin/" .. outputdir .. "/%{prj.name}") |
||||
objdir ("bin-int/" .. outputdir .. "/%{prj.name}") |
||||
|
||||
files { |
||||
"src/**.h", |
||||
"src/**.cpp" |
||||
} |
||||
|
||||
links { "bakanet"} |
@ -0,0 +1,97 @@ |
||||
#include <iostream> |
||||
#include <Ws2tcpip.h> |
||||
#include <WinSock2.h> |
||||
#include <tchar.h> |
||||
|
||||
#pragma comment(lib, "WS2_32.lib") |
||||
|
||||
int main() |
||||
{ |
||||
WSADATA wsaData; |
||||
int err; |
||||
|
||||
err = WSAStartup(MAKEWORD(2, 2), &wsaData); |
||||
|
||||
if (err != 0) |
||||
{ |
||||
std::cout << "Winsock DLL not found!" << std::endl; |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
//server socket
|
||||
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); |
||||
|
||||
if (sock == INVALID_SOCKET) |
||||
{ |
||||
std::cout << "Invalid server socket: " << WSAGetLastError() << std::endl; |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
//conf socket
|
||||
sockaddr_in service; |
||||
service.sin_family = AF_INET; |
||||
service.sin_addr.s_addr = INADDR_ANY; |
||||
service.sin_port = htons(25580); |
||||
|
||||
//bind
|
||||
if (bind(sock, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR) |
||||
{ |
||||
std::cout << "Bind failed: " << WSAGetLastError() << std::endl; |
||||
closesocket(sock); |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
//listen
|
||||
if (listen(sock, SOMAXCONN) == SOCKET_ERROR) |
||||
{ |
||||
std::cout << "Listen failed: " << WSAGetLastError() << std::endl; |
||||
closesocket(sock); |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
std::cout << "Waiting for connection..." << std::endl; |
||||
|
||||
//Accept client socket
|
||||
SOCKET clientSocket = accept(sock, NULL, NULL); |
||||
|
||||
if (clientSocket == INVALID_SOCKET) |
||||
{ |
||||
std::cout << "Accept failed: " << WSAGetLastError() << std::endl; |
||||
closesocket(sock); |
||||
WSACleanup(); |
||||
system("pause"); |
||||
return 0; |
||||
} |
||||
|
||||
std::cout << "Client connected" << std::endl; |
||||
|
||||
char buffer[256]; |
||||
int bytesRead; |
||||
|
||||
do |
||||
{ |
||||
bytesRead = recv(clientSocket, buffer, sizeof(buffer), 0); |
||||
|
||||
if (bytesRead > 0)
|
||||
{ |
||||
buffer[bytesRead] = '\0'; |
||||
std::cout << buffer << std::endl; |
||||
} |
||||
|
||||
} while (bytesRead > 0); |
||||
|
||||
closesocket(clientSocket); |
||||
closesocket(sock); |
||||
WSACleanup(); |
||||
system("pause"); |
||||
|
||||
return 0; |
||||
} |
Loading…
Reference in New Issue