计算机网络实验报告(路由算法、Socket编程)_socket编程实验报告

2020-02-28 其他范文 下载本文

计算机网络实验报告(路由算法、Socket编程)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“socket编程实验报告”。

计算机网络实验报告

班级: 姓名: 学号:

实验一

一. 实验目的及要求

编写程序,模拟距离矢量路由算法的路由表交换过程,演示交换后的路由表的变化。

二. 实验原理

距离矢量路由算法是这样工作的:每个路由器维护一张路由表(即一个矢量),它以网络中的每个路由器为索引,表中列出了当前已知的路由器到每个目标路由器的最佳距离,以及所使用的线路。通过在邻居之间相互交换信息,路由器不断地更新他们的内部路由表。

举例来说,假定使用延迟作为“距离”的度量标准,并且该路由器发送一个列表,其中包含了他到每一个目标路由器的延时估计值;同时,他也从每个邻居路由器接收到一个类似的列表。假设一个路由器接收到来自邻居x的一个列表,其中x(i)表示x估计的到达路由器i所需要的时间。如果该路由器知道他到x的延时为m毫秒,那么他也知道在x(i)+m毫秒之间内经过x可以到达路由器i。一个路由器针对每个邻居都执行这样的计算,就可以发现最佳的估计值,然后在新的路由器表中使用这个最佳的估计值以及对应的输出路线。

三.源程序:

#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,pre 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

if(data[i][j].dis > 0)

printf(“<%c %d> ”, j + 65, data[i][j].dis);

printf(“n”);

}

PrintRoutData();

getch();

for(i = 0;i

{

for(m = 0;m

for(n = 0;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

{

for(n = 0;!feof(pfile)&& n

{

while(!feof(pfile))

{

c = fgetc(pfile);

if(c == ',')

{

num[i] = '';

data[m][n].dis = atoi(num);

data[m][n].flag = 0;

data[m][n].flag = 0;

i = 0;

break;

} /*end of if*/

else if((c >= '0' && c

{

num[i++] = c;

} /*end of else if*/

} /*end of while*/

} /*end of for(n = 0*/

} /*end of for(m = 0*/ }

void PrintRoutData(){

int i, j;

for(i = 0;i

{

settextstyle(1,0,3);

sprintf(tmp,“ %c”,i + 65);

outtextxy(i*80+50,130,tmp);

outtextxy(10,160+i*40,tmp);

}

for(j = 0;j

{

for(i = 0;i

{

if(data[i][j].dis

{

if(data[i][j].flag2 ==1)

{

setfillstyle(SOLID_FILL,5);

bar(80*i+50,40*j+155,80*i+120,40*j+185);

delay(50000);

data[i][j].flag2 =0;

}

setfillstyle(SOLID_FILL,3);

bar(80*i+50,40*j+155,80*i+120,40*j+185);

settextstyle(1,0,2);

sprintf(tmp,“-”);

outtextxy(80*i+65,40*j+165,tmp);

}

else

if(data[i][j].dis >=0)

{

if(data[i][j].flag2 ==1)

{

setfillstyle(SOLID_FILL,5);

bar(80*i+50,40*j+155,80*i+120,40*j+185);

delay(50000);

data[i][j].flag2 =0;

}

setfillstyle(SOLID_FILL,3);

bar(80*i+50,40*j+155,80*i+120,40*j+185);

settextstyle(1,0,2);

sprintf(tmp,“%d”,data[i][j].dis);

outtextxy(80*i+65,40*j+165,tmp);

}

} /*end of for(j = 0*/

} /*end of for(i = 0*/ }

void SendInf(int recv, int send){

int i;

for(i = 0;i

{

if(data[send][i].dis > 0&& data[send][i].flag!=1)

{

if(data[recv][i].dis

{

data[recv][i].dis = data[send][i].dis + data[recv][send].dis;

data[recv][i].flag =1;

data[recv][i].flag2 =1;

}

else if(data[recv][i].dis > data[send][i].dis + data[recv][send].dis)

{

data[recv][i].dis = data[send][i].dis + data[recv][send].dis;

data[recv][i].flag =1;

data[recv][i].flag2 =1;

}

} /*end of if*/

} /*end of for*/ }

void Exchange(){

int i, j;

for(i = 0;i

{

for(j = 0;j

{

if(data[i][j].dis > 0&& data[i][j].flag!=1)

{

SendInf(i, j);

} /*end of if*/

} /*end of for(j = 0*/

} /*end of for(i = 0*/ }

四、实验心得体会

通过本次实验训练,我了解了距离矢量路由算法的基本原理,复习了C语言编程的内容,通过对路由算法的实现,加深了对路由表交换的理解。

实验二

一、实验目的及要求

编写程序,联系Socket编程和TCP/IP协议的应用,要求实现Server端和Client端的信息通信。

二、实验原理

在TCP/IP编程中,为客户端和服务器端提供相同的端口号和IP地址号,实现Server端和Client端互联,运用Java文件流的知识,实现两端的信息传递。

三、源程序

/********************ChatClient*********************/ import java.awt.*;import java.awt.event.*;import java.io.*;import java.io.IOException;import java.net.*;

public cla ChatClient extends Frame{

Socket s = null;DataOutputStream dos = null;TextField tf = new TextField();TextArea ta = new TextArea();

public static void main(String[] args){ new ChatClient().launchFrame();}

public void launchFrame(){ setLocation(400,300);this.setSize(300,300);add(tf,BorderLayout.SOUTH);add(ta,BorderLayout.NORTH);pack();tf.addActionListener(new tfListener());this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

disconn();

System.exit(0);

} });setVisible(true);conn();}

public void conn(){ try {

s = new Socket(“127.0.0.1”,5555);

dos = new DataOutputStream(s.getOutputStream());

System.out.println(“客户端连接成功!”);} catch(UnknownHostException e){

e.printStackTrace();} catch(IOException e){

e.printStackTrace();} }

public void disconn(){ try {

dos.close();

s.close();} catch(IOException e){

e.printStackTrace();} }

private cla tfListener implements ActionListener {

public void actionPerformed(ActionEvent e){

String str = tf.getText().trim();

ta.setText(str);

tf.setText(“”);

try {

dos.writeUTF(str);

dos.flush();

} catch(IOException e1){

e1.printStackTrace();

}

}

} }

/********************ChatServer******************/ import java.io.IOException;import java.net.*;import java.io.*;

public cla ChatServer {

public static void main(String[] args){

boolean started = false;

try {

ServerSocket = new ServerSocket(5555);

started = true;

while(started){

boolean bConn = false;

Socket s =.accept();

bConn = true;

System.out.println(“一个客户端已连接”);

DataInputStream dis = new DataInputStream(s.getInputStream());

while(bConn){

String str = dis.readUTF();

System.out.println(str);

}

}

}

dis.close();} } catch(IOException e){ e.printStackTrace();}

四、实验心得体会 通过本次实验的练习,熟悉了TCP/IP协议,对套接字等概念有了深入的了解,对用Java语言实现Socket编程并实现客户端和服务器端的信息交互有了一定的了解。

《计算机网络实验报告(路由算法、Socket编程).docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
计算机网络实验报告(路由算法、Socket编程)
点击下载文档
相关专题 socket编程实验报告 实验报告 路由 计算机网络 socket编程实验报告 实验报告 路由 计算机网络
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文