diff --git a/driver-station-server/client.cpp b/driver-station-server/client.cpp new file mode 100644 index 0000000..570b23c --- /dev/null +++ b/driver-station-server/client.cpp @@ -0,0 +1,73 @@ +/* + Simple udp client +*/ +#include +#include + +#pragma comment(lib,"ws2_32.lib") //Winsock Library + +#define SERVER "127.0.0.1" //ip address of udp server +#define BUFLEN 512 //Max length of buffer +#define PORT 8888 //The port on which to listen for incoming data + +int main(void) +{ + struct sockaddr_in si_other; + int s, slen=sizeof(si_other); + char buf[BUFLEN]; + char message[BUFLEN]; + WSADATA wsa; + + //Initialise winsock + printf("\nInitialising Winsock..."); + if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) + { + printf("Failed. Error Code : %d",WSAGetLastError()); + exit(EXIT_FAILURE); + } + printf("Initialised.\n"); + + //create socket + if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR) + { + printf("socket() failed with error code : %d" , WSAGetLastError()); + exit(EXIT_FAILURE); + } + + //setup address structure + memset((char *) &si_other, 0, sizeof(si_other)); + si_other.sin_family = AF_INET; + si_other.sin_port = htons(PORT); + si_other.sin_addr.S_un.S_addr = inet_addr(SERVER); + + //start communication + while(1) + { + printf("Enter message : "); + gets(message); + + //send the message + if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen) == SOCKET_ERROR) + { + printf("sendto() failed with error code : %d" , WSAGetLastError()); + exit(EXIT_FAILURE); + } + + //receive a reply and print it + //clear the buffer by filling null, it might have previously received data + memset(buf,'\0', BUFLEN); + //try to receive some data, this is a blocking call + if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen) == SOCKET_ERROR) + { + printf("recvfrom() failed with error code : %d" , WSAGetLastError()); + exit(EXIT_FAILURE); + } + + puts(buf); + } + + closesocket(s); + WSACleanup(); + + return 0; +} \ No newline at end of file diff --git a/driver-station-server/client.exe b/driver-station-server/client.exe new file mode 100644 index 0000000..953d6a2 Binary files /dev/null and b/driver-station-server/client.exe differ diff --git a/driver-station-server/server.cpp b/driver-station-server/server.cpp new file mode 100644 index 0000000..7c86d4d --- /dev/null +++ b/driver-station-server/server.cpp @@ -0,0 +1,84 @@ +/* + Simple UDP Server +*/ + +#include +#include + +#pragma comment(lib,"ws2_32.lib") //Winsock Library + +#define BUFLEN 512 //Max length of buffer +#define PORT 8888 //The port on which to listen for incoming data + +int main() +{ + SOCKET s; + struct sockaddr_in server, si_other; + int slen , recv_len; + char buf[BUFLEN]; + WSADATA wsa; + + slen = sizeof(si_other) ; + + //Initialise winsock + printf("\nInitialising Winsock..."); + if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) + { + printf("Failed. Error Code : %d",WSAGetLastError()); + exit(EXIT_FAILURE); + } + printf("Initialised.\n"); + + //Create a socket + if((s = socket(AF_INET , SOCK_DGRAM , 0 )) == INVALID_SOCKET) + { + printf("Could not create socket : %d" , WSAGetLastError()); + } + printf("Socket created.\n"); + + //Prepare the sockaddr_in structure + server.sin_family = AF_INET; + server.sin_addr.s_addr = INADDR_ANY; + server.sin_port = htons( PORT ); + + //Bind + if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR) + { + printf("Bind failed with error code : %d" , WSAGetLastError()); + exit(EXIT_FAILURE); + } + puts("Bind done"); + + //keep listening for data + while(1) + { + printf("Waiting for data..."); + fflush(stdout); + + //clear the buffer by filling null, it might have previously received data + memset(buf,'\0', BUFLEN); + + //try to receive some data, this is a blocking call + if ((recv_len = recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen)) == SOCKET_ERROR) + { + printf("recvfrom() failed with error code : %d" , WSAGetLastError()); + exit(EXIT_FAILURE); + } + + //print details of the client/peer and the data received + printf("Received packet from %s:%d\n", inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port)); + printf("Data: %s\n" , buf); + + //now reply the client with the same data + if (sendto(s, buf, recv_len, 0, (struct sockaddr*) &si_other, slen) == SOCKET_ERROR) + { + printf("sendto() failed with error code : %d" , WSAGetLastError()); + exit(EXIT_FAILURE); + } + } + + closesocket(s); + WSACleanup(); + + return 0; +} \ No newline at end of file diff --git a/driver-station-server/server.exe b/driver-station-server/server.exe new file mode 100644 index 0000000..35621eb Binary files /dev/null and b/driver-station-server/server.exe differ