第一篇:socket編程實驗心得體會
實驗心得體會
在本次實驗中,我通過對網(wǎng)絡(luò)課上所學(xué)知識的應(yīng)用,學(xué)到了很多實踐中的知識。并且加深了我對課本知識的理解和認識,在實驗過程中,更容易記憶和深入理解各種協(xié)議的工作以及在網(wǎng)絡(luò)編程中應(yīng)該注意的一系列問題。
我們的第一個實驗是對ARP、ICMP、FTP和HTTP協(xié)議的分析和驗證。在利用軟件Etherpeek抓取在主機通信中的報文,得到了很多的關(guān)于這些協(xié)議的具體參數(shù)。在課程學(xué)習(xí)過程中,書本和老師給我的感覺就是太枯燥,通過課本的學(xué)習(xí)根本沒有辦法理解各種協(xié)議的工作細節(jié)。有很多的細微之處是想不通的。但是,在本次實驗中,我就通過各種報文的分析,看到了網(wǎng)絡(luò)中不同層次協(xié)議之間的協(xié)做過程。對應(yīng)不同層之間就是通過協(xié)議來使用,我對整個網(wǎng)路的大體架構(gòu)有了一個統(tǒng)籌的了解,雖然對很多的更深入的知識不是很了解,但是比我在課上學(xué)的東西要更有趣,而且容易學(xué)習(xí),更能夠我學(xué)習(xí)的興趣。
第二個實驗是Socket編程實驗。在編寫網(wǎng)絡(luò)程序之前,我對網(wǎng)路通信可以說一無所知,根本不知道那些網(wǎng)路上的程序是怎么通過網(wǎng)路進行通信的。在本次實驗中,終于揭開了他們神秘的面紗。當(dāng)然在實驗中出現(xiàn)了很多的插曲,我是在Linux環(huán)境下編寫的程序,很多技術(shù)方面的問題都無法解決。查閱書籍和網(wǎng)上咨詢才弄懂了他們的來龍去脈,最終是將我的程序編寫完了。開始接觸網(wǎng)路編程時,那是一頭霧水,根本不知從何下手。在看了輔導(dǎo)教員給我們程序之后才有了很多的起色,才能夠自己編寫程序。在網(wǎng)絡(luò)編程中,我最深的體會就是對具體的內(nèi)部細節(jié)不熟悉,導(dǎo)致在調(diào)試的過程中感覺到很無力。在很多函數(shù)的作用下,經(jīng)常就是一團亂麻。之后,我每次編寫之前就是將用到的函數(shù)的用法溫習(xí)一下,最后還是能夠解決很多的問題的。
本次試驗是我們學(xué)習(xí)網(wǎng)路的第一次。以前的課程從來沒有接觸到網(wǎng)路方面的知識。這次的新知識對我們的挑戰(zhàn)還算不是太大,通過我們的努力,所有的困難時被克服掉了。其實,實驗應(yīng)該是我們的重點,在以后的工作中要的就是我們的實際的動手能力,如果我們在學(xué)習(xí)期間就是只學(xué)了書本上的知識,那樣對理論的了解是不夠深刻的,只有通過實驗才能激發(fā)我們的學(xué)習(xí)興趣。總之,我覺得實驗才是檢驗理論的唯一標(biāo)準(zhǔn)。
第二篇:計算機網(wǎng)絡(luò)實驗報告(路由算法、Socket編程)
計算機網(wǎng)絡(luò)實驗報告
班級: 姓名: 學(xué)號:
實驗一
一. 實驗?zāi)康募耙?/p>
編寫程序,模擬距離矢量路由算法的路由表交換過程,演示交換后的路由表的變化。
二. 實驗原理
距離矢量路由算法是這樣工作的:每個路由器維護一張路由表(即一個矢量),它以網(wǎng)絡(luò)中的每個路由器為索引,表中列出了當(dāng)前已知的路由器到每個目標(biāo)路由器的最佳距離,以及所使用的線路。通過在鄰居之間相互交換信息,路由器不斷地更新他們的內(nèi)部路由表。
舉例來說,假定使用延遲作為“距離”的度量標(biāo)準(zhǔn),并且該路由器發(fā)送一個列表,其中包含了他到每一個目標(biāo)路由器的延時估計值;同時,他也從每個鄰居路由器接收到一個類似的列表。假設(shè)一個路由器接收到來自鄰居x的一個列表,其中x(i)表示x估計的到達路由器i所需要的時間。如果該路由器知道他到x的延時為m毫秒,那么他也知道在x(i)+m毫秒之間內(nèi)經(jīng)過x可以到達路由器i。一個路由器針對每個鄰居都執(zhí)行這樣的計算,就可以發(fā)現(xiàn)最佳的估計值,然后在新的路由器表中使用這個最佳的估計值以及對應(yīng)的輸出路線。
三.源程序:
#include “stdio.h” #include “stdlib.h” #include “malloc.h” #include “graphics.h” #include “dos.h” #define VERNUM 7
typedef struct {
int dis;
int flag;
int flag2;}RoutNode;
char tmp[10];RoutNode data[VERNUM][VERNUM];
void welcome();
void InitRoutData(FILE* pfile);
void PrintRoutData();
void SendInf(int recv, int send);
void Exchange();
int main(){
int start, end, i, j, m, n;
FILE *pfile;
welcome();
pfile = fopen(“1.txt”, “r”);
if(pfile == NULL)
{
printf(“the file wrong,press any key to come back.n”);
getch();
return;
}
else
InitRoutData(pfile);
fclose(pfile);
printf(“nthe original route table:n”);
for(i = 0;i { printf(“%c||”, i + 65); for(j = 0;j < VERNUM;j++) if(data[i][j].dis > 0) printf(“<%c %d> ”, j + 65, data[i][j].dis); printf(“n”); } PrintRoutData(); getch(); for(i = 0;i < VERNUM;i++) { for(m = 0;m < VERNUM;m++) for(n = 0;n < VERNUM;n++) data[m][n].flag = 0; Exchange(); PrintRoutData(); getch(); } printf(“nexchange the route table:n”); return 0;} void welcome(){ int gdriver=DETECT,gmode; registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode,“C:Win-TC”); cleardevice(); setbkcolor(CYAN); setviewport(0,0,639,479,1); clearviewport(); setbkcolor(BLUE); setcolor(14); rectangle(200,200,440,280); setfillstyle(1,5); floodfill(300,240,14); settextstyle(0,0,2); outtextxy(50,30,“Distance Vector Routing Algorithm”); setcolor(15); settextstyle(1,0,4); outtextxy(260,214,“Welcome to use!”); line(0,80,640,80); getch(); delay(300); cleardevice();} void InitRoutData(FILE* pfile){ char num[10]; int i = 0; char c; int m, n; fseek(pfile, 0, 0); for(m = 0;!feof(pfile)&& m < 7;m++) { for(n = 0;!feof(pfile)&& n < 7;n++) { while(!feof(pfile)) { c = fgetc(pfile); if(c == ',') { num[i] = '