Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // UDP_Communication_Framework.cpp : Defines the entry point for the console application.
- //
- #pragma comment(lib, "ws2_32.lib")
- #include "stdafx.h"
- #include <winsock2.h>
- #include "ws2tcpip.h"
- #include<iostream>
- #include<fstream>
- #include<string>
- #include<stdlib.h>
- using namespace std;
- #define TARGET_IP "147.32.221.22"
- #define BUFFERS_LEN 1024
- //#define SENDER
- #define RECEIVER
- #ifdef SENDER
- #define TARGET_PORT 5555
- #define LOCAL_PORT 8888
- #endif // SENDER
- #ifdef RECEIVER
- #define TARGET_PORT 8888
- #define LOCAL_PORT 5555
- #endif // RECEIVER
- void InitWinsock()
- {
- WSADATA wsaData;
- WSAStartup(MAKEWORD(2, 2), &wsaData);
- }
- int processHeader(char* buffer) {
- int ret = 0;
- for (int i = 0; i <= 32; i++) {
- int tmp = (int)buffer[i] - 48;
- //printf("%d\n", tmp);
- if (tmp < 10 && tmp >= 0) {
- ret = ret * 10 + (int)tmp;
- }
- }
- return ret;
- }
- //**********************************************************************
- int main()
- {
- SOCKET socketS;
- InitWinsock();
- struct sockaddr_in local;
- struct sockaddr_in from;
- int fromlen = sizeof(from);
- local.sin_family = AF_INET;
- local.sin_port = htons(LOCAL_PORT);
- local.sin_addr.s_addr = INADDR_ANY;
- socketS = socket(AF_INET, SOCK_DGRAM, 0);
- if (bind(socketS, (sockaddr*)&local, sizeof(local)) != 0) {
- printf("Binding error!\n");
- getchar(); //wait for press Enter
- return 1;
- }
- //**********************************************************************
- char buffer_rx[BUFFERS_LEN];
- char buffer_tx[BUFFERS_LEN];
- #ifdef SENDER
- sockaddr_in addrDest;
- addrDest.sin_family = AF_INET;
- addrDest.sin_port = htons(TARGET_PORT);
- InetPton(AF_INET, _T(TARGET_IP), &addrDest.sin_addr.s_addr);
- int i = 1313;
- sprintf(buffer_tx, "%d", i);
- //strncpy(buffer_tx, "something", BUFFERS_LEN); //put some data to buffer
- printf("Sending packet.\n");
- sendto(socketS, buffer_tx, strlen(buffer_tx), 0, (sockaddr*)&addrDest, sizeof(addrDest));
- closesocket(socketS);
- #endif // SENDER
- #ifdef RECEIVER
- int messageLength;
- char name[BUFFERS_LEN];
- strncpy(buffer_rx, "", BUFFERS_LEN);
- printf("Recieving ...\n");
- // get name
- if (recvfrom(socketS, buffer_rx, sizeof(buffer_rx), 0, (sockaddr*)&from, &fromlen) == SOCKET_ERROR) {
- printf("Header socket error!\n");
- getchar();
- return 1;
- }
- else {
- printf("Name: %s!\n", buffer_rx);
- }
- strcpy(name, buffer_rx);
- // get size
- if (recvfrom(socketS, buffer_rx, sizeof(buffer_rx), 0, (sockaddr*)&from, &fromlen) == SOCKET_ERROR) {
- printf("Header socket error!\n");
- getchar();
- return 1;
- }
- else {
- messageLength = processHeader(buffer_rx);
- printf("Size: %d\n", messageLength);
- }
- char* fileBuffer = (char*)malloc(messageLength);
- // init file
- FILE *p_file = fopen(name, "wb");
- // process header, set counter
- int i;
- for (i = 0; i < messageLength / BUFFERS_LEN; i++) {
- strncpy(buffer_rx, "", BUFFERS_LEN);
- if (recvfrom(socketS, buffer_rx, sizeof(buffer_rx), 0, (sockaddr*)&from, &fromlen) == SOCKET_ERROR) {
- printf("Socket error!\n");
- getchar();
- return 1;
- }
- else {
- printf("Data: %i %x\n", i, buffer_rx);
- strncpy(fileBuffer, buffer_rx, BUFFERS_LEN);
- fileBuffer += BUFFERS_LEN;
- // fputs(buffer_rx, p_file);
- }
- }
- if (recvfrom(socketS, buffer_rx, sizeof(buffer_rx), 0, (sockaddr*)&from, &fromlen) == SOCKET_ERROR) {
- printf("Socket error!\n");
- getchar();
- return 1;
- }
- else {
- printf("Data: %i %x\n", i, buffer_rx);
- strncpy(fileBuffer, buffer_rx, messageLength % BUFFERS_LEN + 1);
- fileBuffer -= BUFFERS_LEN * i;
- // fputs(buffer_rx, p_file);
- }
- //for (int j = 0; j < messageLength; ++j)
- fwrite(fileBuffer, 1, messageLength, p_file);
- // fprintf(p_file, "%c", fileBuffer[j]);
- //fputs(fileBuffer, p_file);
- fclose(p_file);
- closesocket(socketS);
- #endif
- //**********************************************************************
- getchar(); //wait for press Enter
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement