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