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 "127.0.0.1"
- #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);
- }
- // reads number saved as array of chars
- int processSize(char* buffer) {
- int ret = 0;
- ret += buffer[0] << 24;
- ret += buffer[1] << 16;
- ret += buffer[2] << 8;
- ret += buffer[3];
- //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 size = 0;
- char name[] = "car.jpg";
- // send file name
- sprintf(buffer_tx, "%s", name);
- printf("Sending name.\n");
- sendto(socketS, buffer_tx, strlen(buffer_tx), 0, (sockaddr*)&addrDest, sizeof(addrDest));
- // open file
- FILE *p_file = fopen(name, "rb");
- // get file size
- fseek(p_file, 0, SEEK_END);
- size = ftell(p_file);
- rewind(p_file);
- // send file size
- buffer_tx[0] = (value >> 24);// &0xFF;
- buffer_tx[1] = (value >> 16);// &0xFF;
- buffer_tx[2] = (value >> 8);// &0xFF;
- buffer_tx[3] = value;// &0xFF;
- // sprintf(buffer_tx, "%d", size);
- printf("Sending size. (%d)\n", size);
- sendto(socketS, buffer_tx, strlen(buffer_tx), 0, (sockaddr*)&addrDest, sizeof(addrDest));
- // read file into memory(buffer)
- char* fileBuffer = (char*)malloc(size);
- fread(fileBuffer, 1, size + 1, p_file);
- printf("\n");
- // send start indicator
- //strncpy(buffer_tx, "START\n", BUFFERS_LEN);
- //sendto(socketS, buffer_tx, strlen(buffer_tx), 0, (sockaddr*)&addrDest, sizeof(addrDest));
- // send file
- int i;
- for (i = 0; i < size / BUFFERS_LEN; i++) {
- memcpy(buffer_tx, fileBuffer + i * BUFFERS_LEN, BUFFERS_LEN);
- printf("Sending packet. (%d)\n", i);
- sendto(socketS, buffer_tx, BUFFERS_LEN, 0, (sockaddr*)&addrDest, sizeof(addrDest));
- }
- // for last packet (can be shorter than BUFFERS_LEN)
- memcpy(buffer_tx, fileBuffer + i * BUFFERS_LEN, size % BUFFERS_LEN);
- printf("Sending last packet.");
- sendto(socketS, buffer_tx, BUFFERS_LEN, 0, (sockaddr*)&addrDest, sizeof(addrDest));
- // send end indicator
- //strncpy(buffer_tx, "END\n", BUFFERS_LEN);
- //sendto(socketS, buffer_tx, strlen(buffer_tx), 0, (sockaddr*)&addrDest, sizeof(addrDest));
- // close file and connection
- fclose(p_file);
- closesocket(socketS);
- #endif // SENDER
- #ifdef RECEIVER
- int messageLength;
- char name[BUFFERS_LEN];
- // cleans the buffer
- 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 = processSize(buffer_rx);
- printf("Size: %d\n", messageLength);
- }
- // init file
- FILE *p_file = fopen(name, "wb");
- // read whole message
- int i;
- for (i = 0; i < messageLength / BUFFERS_LEN; i++) {
- if (recvfrom(socketS, buffer_rx, BUFFERS_LEN, 0, (sockaddr*)&from, &fromlen) == SOCKET_ERROR) {
- printf("Socket error!\n");
- getchar();
- return 1;
- }
- else {
- printf("Recieving packet: %i\n", i);
- fwrite(buffer_rx, 1, BUFFERS_LEN, p_file);
- }
- }
- // recieve last packet
- if (recvfrom(socketS, buffer_rx, sizeof(buffer_rx), 0, (sockaddr*)&from, &fromlen) == SOCKET_ERROR) {
- printf("Socket error!\n");
- getchar();
- return 1;
- }
- else {
- printf("Recieving last packet.");
- fwrite(buffer_rx, 1, messageLength % BUFFERS_LEN, p_file);
- }
- // close file and connection
- fclose(p_file);
- closesocket(socketS);
- #endif
- //**********************************************************************
- getchar(); //wait for press Enter
- return 0;
- }
Add Comment
Please, Sign In to add comment