日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模拟网络通信中存储转发的分组交换算法

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟网络通信中存储转发的分组交换算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述:

在說明這個存儲轉發的分組交換算法,我想大家應該首先了解什么是分組交換。

分組交換:

? ? 分組交換很簡單,就是將接收端接收到的一連串數據先存儲下來,然后進行分組(分組的目的是因為原數據長度太長,在通信中,因為噪音的干擾會失真重傳。那么,這樣的話發送者就必須從頭開始將原數據再發送一次,這樣的通信在數據量比較多的情況顯然就會影響到通信效率),在分組的數據上進行添加首部,把這樣添加地首部的數據放網絡上進行傳輸。在目的端,再把分組的數據除掉首部,進行組裝,即是一個還原的過程。

部分代碼如下:

這個代碼是從文件中讀取數據,把讀取到的數據存儲在全局變量inform[]數組中;

/* -------------------------------- Reading File -------------------------------- */ int reading() {FILE * fp_r;fp_r = fopen(READING_PATH, "r");if (fp_r == NULL){printf("ERROR.your file is not being.\n");return ERROR;} char temp;temp = fgetc(fp_r); int i;memset(inform, 0, sizeof(inform)); for (i = 0; temp != EOF; ++i){inform[i] = temp;temp = fgetc(fp_r);}fclose(fp_r);return OK; }

拆分:

上面的代碼中,數組inform即是原數據,下面我要對這個原數據進行分組拆分,將它分成若干個小分組,再添加自定義的一個首部,代碼如下:

/* -------------------------------- Switch Packet Forwarding -------------------------------- */ int switchPacket() {FILE * fp_s;fp_s = fopen(PACKET_SWITCHED_PATH, "a+"); printf("Defines a segment length.\n");int i, j;int sub_len, len, len_head;scanf("%d", &sub_len);len = strlen(inform);len_head = strlen(HEAD);char temp[TEMP_MAX];memset(temp, 0, sizeof(temp));strcpy(temp, HEAD); // add headfor (i = 0, j = len_head; i < len; ++i){if ((i+1) % sub_len){temp[j] = inform[i];++j; // temp moving go back}else{temp[j] = inform[i]; // make up for location of sub_len++j; //temp[j] = '\n'; // new linefprintf(fp_s, "%s", temp); // write this packet to the filememset(temp, 0, sizeof(temp)); // redefine temp[]strcpy(temp, HEAD); // add headj = len_head; // reset location of temp[]}}fclose(fp_s);AssembleFrame(len_head, sub_len);return OK; }


還原:

而對分過組的數據段,必須還原,不然目的端接收到的數據就會是一串看不懂的字符串,即亂碼,讓人無法辨認。還原代碼如下:

/* -------------------------------- Assemble Frame -------------------------------- */ int AssembleFrame(int front, int rear) {FILE * fp_a;fp_a = fopen(PACKET_SWITCHED_PATH, "r");if (fp_a == NULL){return ERROR;}char temp, swstr[MAX*2], str[MAX];temp = fgetc(fp_a);int i, j;memset(swstr, 0, sizeof(swstr));memset(str, 0, sizeof(str));for (i = 0; temp != EOF; ++i){swstr[i] = temp;temp = fgetc(fp_a);}int len = strlen(swstr);for (i = 0, j = 0; i < len; ++i){if ((i+1) % (front+rear) == 0 || (i+1) % (front+rear) > front) // get char from front to (front+rear){str[j] = swstr[i];++j;} }printf("Group of data binding is: %s\n", str);fclose(fp_a);return OK; }

源代碼下載:

完整的程序代碼,我放在了我的網易博客上了。感興趣的朋友可以去看看,以下是連接。

http://blog.163.com/stone_sqrt3/blog/static/220412088201343011237752/


總結

以上是生活随笔為你收集整理的模拟网络通信中存储转发的分组交换算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。