-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.c
More file actions
65 lines (50 loc) · 1.48 KB
/
server.c
File metadata and controls
65 lines (50 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "server.h"
#include <stdio.h>
#ifdef _WIN32
#include "windowsNetworking.h"
#include <winsock2.h>
void run_server() {
run_win_server();
}
#endif
#include "messageProcessing.h"
void run_win_server() {
WSADATA wsa;
SOCKET s, new_socket;
int c;
_networking_init(&wsa);
_networking_create_socket_(&s);
struct sockaddr_in server, client;
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(8001);
_networking_socket_bind(&s, &server);
listen(s, 3);
puts("Waiting for incoming connections...");
c = sizeof(struct sockaddr_in);
while((new_socket = accept(s, (struct sockaddr *) &client, &c)) != INVALID_SOCKET) {
puts("Connection accepted");
CreateThread(NULL, 0, win_server_socket_thread, (void *)&new_socket, 0, NULL);
}
if(new_socket == INVALID_SOCKET) {
printf("accept failed with error code : %d", WSAGetLastError());
exit(-1);
}
closesocket(s);
WSACleanup();
}
DWORD WINAPI win_server_socket_thread(void * data) {
SOCKET new_socket = *(SOCKET *) data;
char msg[1024]="";
while(recv(new_socket, msg, 1024, 0)) {
printf("%s\n", msg);
char * inputs[3];
char message[100]="";
stringTokenize(&msg, inputs);
performOperation(inputs, &message);
send(new_socket, message, strlen(message), 0);
}
closesocket(new_socket);
puts("Client Disconnected from Server");
return 0;
}