计算机网络socket编程实验报告

时间:2024.3.27

        

                                                       

黑龙江大学教务处

黑龙江大学计算机科学与技术专业、软件工程专业

《计算机网络》课程实验报告


第二篇:计算机网络实验报告(路由算法、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,press any key to come back.\n"); getch();

return;

}

else

InitRoutData(pfile);

fclose(pfile);

printf("\nthe original route table:\n");

for (i = 0; i<VERNUM; 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] = '\0';

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 <= '9') || 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 < VERNUM; 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< VERNUM; j++)

{

for (i = 0; i < VERNUM; i++)

{

if (data[i][j].dis <= 0&&i!=j)

{

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 < VERNUM; i++)

{

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

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 < VERNUM; i++)

{

for (j = 0; j < VERNUM; 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 class 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 class 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 class ChatServer {

public static void main(String[] args) {

boolean started = false;

try {

ServerSocket ss = new ServerSocket(5555);

started = true;

while(started) {

boolean bConn = false;

Socket s = ss.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编程 实验报告

实验名称利用Socket进行网络编程班级软件实验目的学号0姓名熟悉和掌握socket编程的基本理论和方法掌握基于TCP和UDP的工作原理以及Socket编程的一般方法能够编写简单的网络应用程序实验要求掌握一些w...

Socket编程实验报告

实验报告实验一Socket编程一实验目的通过socket程序的编写调试掌握socket编程的基本方法了解客户端与服务器端的特点掌握并熟悉运用socket类与ServerSocket类二实验内容学习socket编...

socket编程实验报告

姓名学院实验时间计算机网络实验题目Socket编程实验1基于UDP的Socket编程实验2基于TCP的Socket编程学号年级目录一实验内容3实验1基于UDP的Socket编程3实验2基于TCP的Socket编...

socket编程-实验报告

数学与计算机学院计算机网络实验报告年级学号姓名成绩专业网络工程实验地点指导教师实验项目socket点对点聊天工具实验日期20xx512一实验目的通过本实验熟悉和掌握socket编程的基本理论和方法掌握给予TCP...

实验二:基于TCPUDP的Socket编程

实验二基于TCPUDP的Socket编程实验目的熟悉和掌握socket编程的基本理论和方法掌握基于TCP和UDP的工作原理以及Socket编程的一般方法能够编写简单的网络应用程序实验要求请在以下题目中选择一个按...

_socket编程实验报告

姓名吴文珊学号0909102525一实验题目学习Socket网络编程实现两台机器互相通信二需求分析1输入的形式服务器端输入监听端口号客户端输入要连接的地址字符串或者点分10进制地址端口号向服务器发送的内容服务器...

socket编程实验报告

实验一Socket编程班级电子商务082班学号20xx5154姓名杨阳一目的通过socket程序的编写调试掌握socket编程的基本方法促进学生对概念的理解培养动手能力二基本要求编写并调试教学中使用的socke...

socket编程实验

实验报告学院计信学院专业软工班级软件123

西安邮电大学Socket网络编程实验报告

高级Internet实验报告题目Socket网络编程学生姓名班级学号指导老师王文浪成绩西安邮电大学计算机学院20xx年4月27日一实验目的熟悉Socket网络编程熟悉CS客户机模式熟悉ServerSocket编...

ch33 实验十七 网络编程(一)Socket通信

J2ME程序设计之网络编程一Socket通信J2ME程序设计之网络编程一Socket通信J2ME程序设计之网络编程一Socket通信J2ME程序设计之网络编程一Socket通信J2ME程序设计之网络编程一Soc...

WinSocket编程实验报告

实验六WinSock编程实验报告1实验目的和要求1学习网络中进程之间通信的原理和实现方法2掌握在VB或VC等集成开发环境中编写网络程序的方法3编写一个简单的聊天程序最低要求实现两人一组的两台计算机之间的收发文本...

网络实验6Socket编程实现聊天程序

南昌航空大学实验报告课程名称计算机网络实验名称Socket编程实现聊天程序班级090451班学生姓名杨望学号09045131指导教师评定签名一实验目的1掌握网络应用程序的开发方法2掌握ClientServer结...

socket编程实验报告(21篇)