सी में सॉकेट प्रोग्रामिंग को लागू करने वाले दो कंप्यूटरों के बीच डेटा स्थानांतरित किया जा सकता है।
उसी स्थिति में, उपयोगकर्ता डेटाग्राम प्रोटोकॉल (यूडीपी) और साधारण क्लाइंट/सर्वर को लागू करने वाली फाइलें आसानी से भेजी जा सकती हैं।
सुरक्षा - एन्क्रिप्शन द्वारा नियंत्रित।
प्रोटोकॉल - यूडीपी
एन्क्रिप्शन - XOR एन्क्रिप्शन
एल्गोरिदम
-
सर्वर शुरू हो गया है और फ़ाइल नाम की प्रतीक्षा कर रहा है।
-
क्लाइंट द्वारा एक फ़ाइल नाम भेजा जाता है।
-
यह फ़ाइल नाम सर्वर द्वारा प्राप्त किया जाता है। यदि फ़ाइल मौजूद है, तो सर्वर फ़ाइल को पढ़ना शुरू कर देता है और जब तक फ़ाइल का अंत नहीं हो जाता तब तक एन्क्रिप्टेड फ़ाइल सामग्री से भरा बफर भेजना जारी रखता है।
-
फ़ाइल का अंत ईओएफ द्वारा चिह्नित है।
-
जब तक ईओएफ प्राप्त नहीं हो जाता तब तक फाइल बफर के रूप में प्राप्त होती है। उसके बाद इसे एन्क्रिप्ट किया जाता है।
-
यदि फ़ाइल मौजूद नहीं है, तो "फ़ाइल नहीं मिली" संदेश भेजा जाता है।
सर्वर
// server code for UDP socket programming #include <arpa/inet.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <unistd.h> #define IP_Protocol 0 #define Port_No 15050 #define Net_Buf_Size 32 #define CipherKey 'S' #define SendRecvFlag 0 #define NoFile "File Not Found!" // function for clearing buffer void clearBuf(char* b1){ int i; for (i = 0; i < Net_Buf_Size; i++) b1[i] = '\0'; } // function for encryption method char Cipher(char ch1){ return ch1 ^ CipherKey; } // function for sending file int sendFile(FILE* fp1, char* buf1, int s1){ int i, len; if (fp1 == NULL) { strcpy(buf1, NoFile); len = strlen(NoFile); buf1[len] = EOF; for (i = 0; i <= len; i++) buf1[i] = Cipher(buf1[i]); return 1; } char ch1, ch2; for (i = 0; i < s1; i++) { ch1= fgetc(fp); ch2 = Cipher(ch1); buf1[i] = ch2; if (ch1 == EOF) return 1; } return 0; } // driver code int main(){ int sockfd1, nBytes; struct sockaddr_in addr_con; int addrlen = sizeof(addr_con); addr_con.sin_family = AF_INET; addr_con.sin_port = htons(Port_No); addr_con.sin_addr.s_addr = INADDR_ANY; char net_buf1[Net_Buf_Size]; FILE* fp1; // socket() sockfd1 = socket(AF_INET, SOCK_DGRAM, IP_Protocol); if (sockfd1 < 0) printf("\nfile descriptor is not received!!\n"); else printf("\nfile descriptor %d is received\n", sockfd1); // bind() if (bind(sockfd1, (struct sockaddr*)&addr_con, sizeof(addr_con)) == 0) printf("\nSuccessfully is binded!\n"); else printf("\nBinding is Failed!\n"); while (1) { printf("\nWaiting for name of file...\n"); // receive name of file clearBuf(net_buf1); nBytes = recvfrom(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, &addrlen); fp1 = fopen(net_buf1, "r"); printf("\nFile Name is Received: %s\n", net_buf1); if (fp1 == NULL) printf("\nFile open is failed!\n"); else printf("\nFile Successfully is opened!\n"); while (1) { // process if (sendFile(fp1, net_buf1, Net_Buf_Size)) { sendto(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, addrlen); break; } // send sendto(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, addrlen); clearBuf(net_buf1); } if (fp1 != NULL) fclose(fp1); } return 0; }
ग्राहक
// client code for UDP socket programming #include <arpa/inet.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <unistd.h> #define IP_Protocol 0 #define IP_Address "127.0.0.1" // localhost #define Port_No 15050 #define Net_Buf_Size 32 #define CipherKey 'S' #define SendRecvFlag 0 // function for clearing buffer void clearBuf(char* b1){ int i; for (i = 0; i < Net_Buf_Size; i++) b1[i] = '\0'; } // function for decryption method char Cipher(char ch1){ return ch1 ^ CipherKey; } // function for receiveing file int recvFile(char* buf1, int s1) { int i; char ch1; for (i = 0; i < s1; i++) { ch1 = buf1[i]; ch1 = Cipher(ch1); if (ch1 == EOF) return 1; else printf("%c", ch1); } return 0; } // driver code int main(){ int sockfd1, nBytes; struct sockaddr_in addr_con; int addrlen = sizeof(addr_con); addr_con.sin_family = AF_INET; addr_con.sin_port = htons(Port_No); addr_con.sin_addr.s_addr = inet_addr(IP_Address); char net_buf1[Net_Buf_Size]; FILE* fp1; // socket() sockfd1 = socket(AF_INET, SOCK_DGRAM, IP_Protocol); if (sockfd1 < 0) printf("\nfile descriptor is not received!!\n"); else printf("\nfile descriptor %d is received\n", sockfd1); while (1) { printf("\nPlease enter the name of file to receive:\n"); scanf("%s", net_buf1); sendto(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, addrlen); printf("\n---------Data is Received---------\n"); while (1) { // receive clearBuf(net_buf1); nBytes = recvfrom(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, &addrlen); // process if (recvFile(net_buf1, Net_Buf_Size)) { break; } } printf("\n-------------------------------\n"); } return 0; }