more network-stuff
This commit is contained in:
parent
0ba3e4156a
commit
6a7582973a
63
client.cpp
Normal file
63
client.cpp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include "network.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
struct hostent *getHost()
|
||||||
|
{
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (false == initNetwork())
|
||||||
|
{
|
||||||
|
fputs("Failed to init WinSock", stderr);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct hostent * myhost = gethostbyname("localhost");
|
||||||
|
printf("Found IP Address!\n");
|
||||||
|
|
||||||
|
struct sockaddr_in sain;
|
||||||
|
sain.sin_family = AF_INET;
|
||||||
|
sain.sin_port = htons(1338);
|
||||||
|
sain.sin_addr.s_addr= *( (unsigned long *)(myhost->h_addr_list[0]) );
|
||||||
|
SOCKET serverSocket = serverConnect(&sain);
|
||||||
|
|
||||||
|
if (INVALID_SOCKET == serverSocket)
|
||||||
|
{
|
||||||
|
puts("connection failed.");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
puts("recieving...");
|
||||||
|
bool done = false;
|
||||||
|
while (!done)
|
||||||
|
{
|
||||||
|
// look for new commands
|
||||||
|
while (pollRead(serverSocket))
|
||||||
|
{
|
||||||
|
unsigned char cmd = 0;
|
||||||
|
int ret = recv(serverSocket, (char*)&cmd, 1, 0);
|
||||||
|
if (0 == ret) done = true;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("cmd: %02x\n", cmd);
|
||||||
|
if (cmd == 1)
|
||||||
|
{
|
||||||
|
printf("yes, master!\n");
|
||||||
|
unsigned char cmd = 0x1;
|
||||||
|
send(serverSocket, (char*)&cmd, 1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
putchar('.');
|
||||||
|
}
|
||||||
|
closesocket(serverSocket);
|
||||||
|
|
||||||
|
closeNetwork();
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
68
network.cpp
Normal file
68
network.cpp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#include "network.h"
|
||||||
|
|
||||||
|
bool initNetwork()
|
||||||
|
{
|
||||||
|
WSADATA wsaData;
|
||||||
|
if (0 != WSAStartup(MAKEWORD( 2, 0 ), &wsaData)) return false;
|
||||||
|
if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void closeNetwork()
|
||||||
|
{
|
||||||
|
WSACleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
SOCKET clientConnect(SOCKET serverSocket)
|
||||||
|
{
|
||||||
|
SOCKET clientSocket = accept(serverSocket, NULL, NULL);
|
||||||
|
if (INVALID_SOCKET == clientSocket) return INVALID_SOCKET;
|
||||||
|
|
||||||
|
const char *expectedHandshake = "hello, synctracker!";
|
||||||
|
char recievedHandshake[19];
|
||||||
|
|
||||||
|
recv(clientSocket, recievedHandshake, int(strlen(expectedHandshake)), 0);
|
||||||
|
if (strncmp(expectedHandshake, recievedHandshake, strlen(expectedHandshake)) != 0)
|
||||||
|
{
|
||||||
|
closesocket(clientSocket);
|
||||||
|
return INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *test = "hello, demo!";
|
||||||
|
send(clientSocket, test, int(strlen(test)), 0);
|
||||||
|
|
||||||
|
return clientSocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
SOCKET serverConnect(struct sockaddr_in *addr)
|
||||||
|
{
|
||||||
|
SOCKET serverSocket = socket( AF_INET, SOCK_STREAM, 0 );
|
||||||
|
connect( serverSocket,(struct sockaddr *)addr, sizeof(struct sockaddr_in));
|
||||||
|
|
||||||
|
const char * request_text = "hello, synctracker!";
|
||||||
|
send(serverSocket, request_text, int(strlen(request_text)), 0);
|
||||||
|
|
||||||
|
const char *expectedHandshake = "hello, demo!";
|
||||||
|
char recievedHandshake[12];
|
||||||
|
recv(serverSocket, recievedHandshake, int(sizeof(recievedHandshake)), 0);
|
||||||
|
if (strncmp(expectedHandshake, recievedHandshake, strlen(expectedHandshake)) != 0)
|
||||||
|
{
|
||||||
|
closesocket(serverSocket);
|
||||||
|
return INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
return serverSocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool pollRead(SOCKET socket)
|
||||||
|
{
|
||||||
|
struct timeval timeout = { 0, 0 };
|
||||||
|
fd_set fds;
|
||||||
|
|
||||||
|
FD_ZERO(&fds);
|
||||||
|
FD_SET(socket, &fds);
|
||||||
|
|
||||||
|
// look for new commands
|
||||||
|
return select(0, &fds, NULL, NULL, &timeout) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
14
network.h
Normal file
14
network.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef NETWORK_H
|
||||||
|
#define NETWORK_H
|
||||||
|
|
||||||
|
#include <winsock2.h>
|
||||||
|
|
||||||
|
bool initNetwork();
|
||||||
|
void closeNetwork();
|
||||||
|
|
||||||
|
SOCKET clientConnect(SOCKET serverSocket);
|
||||||
|
SOCKET serverConnect(struct sockaddr_in *addr);
|
||||||
|
|
||||||
|
bool pollRead(SOCKET socket);
|
||||||
|
|
||||||
|
#endif /* NETWORK_H */
|
||||||
148
synctracker2.cpp
148
synctracker2.cpp
@ -121,82 +121,45 @@ static ATOM registerMainWindowClass(HINSTANCE hInstance)
|
|||||||
return RegisterClassEx(&wc);
|
return RegisterClassEx(&wc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "network.h"
|
||||||
#include <winsock2.h>
|
|
||||||
|
|
||||||
int _tmain(int argc, _TCHAR* argv[])
|
int _tmain(int argc, _TCHAR* argv[])
|
||||||
{
|
{
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
MSG Msg;
|
|
||||||
HINSTANCE hInstance = GetModuleHandle(NULL);
|
HINSTANCE hInstance = GetModuleHandle(NULL);
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
WSADATA wsaData;
|
if (false == initNetwork())
|
||||||
int error = WSAStartup( MAKEWORD( 2, 0 ), &wsaData );
|
|
||||||
if (0 != error)
|
|
||||||
{
|
{
|
||||||
fputs("Failed to init WinSock", stderr);
|
fputs("Failed to init WinSock", stderr);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0)
|
SOCKET serverSocket = socket( AF_INET, SOCK_STREAM, 0 );
|
||||||
{
|
|
||||||
fputs("Wrong version of WinSock", stderr);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
SOCKET server = socket( AF_INET, SOCK_STREAM, 0 );
|
|
||||||
|
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sin;
|
||||||
memset( &sin, 0, sizeof sin );
|
memset( &sin, 0, sizeof sin );
|
||||||
|
|
||||||
sin.sin_family = AF_INET;
|
sin.sin_family = AF_INET;
|
||||||
sin.sin_addr.s_addr = INADDR_ANY;
|
sin.sin_addr.s_addr = INADDR_ANY;
|
||||||
sin.sin_port = htons( 21 );
|
sin.sin_port = htons( 1338 );
|
||||||
|
|
||||||
if (SOCKET_ERROR == bind( server, (struct sockaddr *)&sin, sizeof(sin)))
|
puts("binding...");
|
||||||
|
if (SOCKET_ERROR == bind( serverSocket, (struct sockaddr *)&sin, sizeof(sin)))
|
||||||
{
|
{
|
||||||
fputs("Coult not start server", stderr);
|
fputs("Coult not start server", stderr);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
while ( listen( server, SOMAXCONN ) == SOCKET_ERROR );
|
puts("listening...");
|
||||||
|
while ( listen( serverSocket, SOMAXCONN ) == SOCKET_ERROR );
|
||||||
|
|
||||||
int length = sizeof(sin);
|
/* ULONG nonBlock = 1;
|
||||||
SOCKET client = accept( server, (sockaddr *)&sin, &length );
|
if (ioctlsocket(serverSocket, FIONBIO, &nonBlock) == SOCKET_ERROR)
|
||||||
|
|
||||||
const char *test = "TEST123";
|
|
||||||
int sent = send( client, test, strlen(test), 0);
|
|
||||||
if (SOCKET_ERROR == sent)
|
|
||||||
{
|
{
|
||||||
int err = WSAGetLastError();
|
printf("ioctlsocket() failed\n");
|
||||||
fprintf(stderr, "failed to send - err %d\n", err);
|
return 0;
|
||||||
exit(1);
|
} */
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
unsigned long int nonBlock = 1;
|
|
||||||
if (ioctlsocket(client, FIONBIO, &nonBlock) == SOCKET_ERROR)
|
|
||||||
{
|
|
||||||
printf("ioctlsocket() failed \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int read = 0;
|
|
||||||
while (read < 20)
|
|
||||||
{
|
|
||||||
char buffer[1024];
|
|
||||||
int len = recv(client, buffer, 1024, 0);
|
|
||||||
if (0 < len)
|
|
||||||
{
|
|
||||||
printf("got \"%s\" - left: %d\n", buffer, 20 - (read + len));
|
|
||||||
read += len;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
closesocket(client);
|
|
||||||
closesocket(server);
|
|
||||||
WSACleanup();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SyncData syncData;
|
SyncData syncData;
|
||||||
@ -255,20 +218,81 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
ShowWindow(hwnd, TRUE);
|
ShowWindow(hwnd, TRUE);
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
/* while (1)
|
|
||||||
|
bool done = false;
|
||||||
|
SOCKET clientSocket = INVALID_SOCKET;
|
||||||
|
MSG msg;
|
||||||
|
while (!done)
|
||||||
{
|
{
|
||||||
SOCKET client;
|
if (INVALID_SOCKET == clientSocket)
|
||||||
int length;
|
{
|
||||||
length = sizeof sin;
|
fd_set fds;
|
||||||
client = accept( server, (sockaddr *)&sin, &length );
|
FD_ZERO(&fds);
|
||||||
} */
|
FD_SET(serverSocket, &fds);
|
||||||
|
struct timeval timeout;
|
||||||
|
timeout.tv_sec = 0;
|
||||||
|
timeout.tv_usec = 0;
|
||||||
|
|
||||||
|
// look for new clients
|
||||||
|
if (select(0, &fds, NULL, NULL, &timeout) > 0)
|
||||||
|
{
|
||||||
|
puts("accepting...");
|
||||||
|
clientSocket = clientConnect(serverSocket);
|
||||||
|
if (INVALID_SOCKET != clientSocket)
|
||||||
|
{
|
||||||
|
unsigned char cmd = 0x1;
|
||||||
|
send(clientSocket, (char*)&cmd, 1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned char cmd = 0x1;
|
||||||
|
send(clientSocket, (char*)&cmd, 1, 0);
|
||||||
|
|
||||||
|
// look for new commands
|
||||||
|
while (pollRead(clientSocket))
|
||||||
|
{
|
||||||
|
unsigned char cmd = 0;
|
||||||
|
int ret = recv(clientSocket, (char*)&cmd, 1, 0);
|
||||||
|
if (1 != ret)
|
||||||
|
{
|
||||||
|
closesocket(clientSocket);
|
||||||
|
clientSocket = INVALID_SOCKET;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("cmd: %02x\n", cmd);
|
||||||
|
if (cmd == 1) printf("yes, master!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// terminate connection
|
||||||
|
/* cmd = 0x0;
|
||||||
|
send(clientSocket, (char*)&cmd, 1, 0);
|
||||||
|
closesocket(clientSocket);
|
||||||
|
clientSocket = INVALID_SOCKET; */
|
||||||
|
}
|
||||||
|
|
||||||
|
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||||
|
{
|
||||||
|
TranslateMessage(&msg);
|
||||||
|
DispatchMessage(&msg);
|
||||||
|
if (WM_QUIT == msg.message) done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
closesocket(serverSocket);
|
||||||
|
closeNetwork();
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// Step 3: The Message Loop
|
// Step 3: The Message Loop
|
||||||
while(GetMessage(&Msg, NULL, 0, 0) > 0)
|
while(GetMessage(&msg, NULL, 0, 0) > 0)
|
||||||
{
|
{
|
||||||
TranslateMessage(&Msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&Msg);
|
DispatchMessage(&msg);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -276,5 +300,5 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
trackView = NULL;
|
trackView = NULL;
|
||||||
|
|
||||||
UnregisterClass(mainWindowClassName, hInstance);
|
UnregisterClass(mainWindowClassName, hInstance);
|
||||||
return int(Msg.wParam);
|
return int(msg.wParam);
|
||||||
}
|
}
|
||||||
@ -180,6 +180,10 @@
|
|||||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
|
RelativePath=".\network.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath=".\stdafx.cpp"
|
RelativePath=".\stdafx.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
@ -198,6 +202,10 @@
|
|||||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
|
RelativePath=".\network.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath=".\stdafx.h"
|
RelativePath=".\stdafx.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user