计算机网络实验报告.docx

上传人:b****1 文档编号:2927358 上传时间:2023-05-05 格式:DOCX 页数:23 大小:176.83KB
下载 相关 举报
计算机网络实验报告.docx_第1页
第1页 / 共23页
计算机网络实验报告.docx_第2页
第2页 / 共23页
计算机网络实验报告.docx_第3页
第3页 / 共23页
计算机网络实验报告.docx_第4页
第4页 / 共23页
计算机网络实验报告.docx_第5页
第5页 / 共23页
计算机网络实验报告.docx_第6页
第6页 / 共23页
计算机网络实验报告.docx_第7页
第7页 / 共23页
计算机网络实验报告.docx_第8页
第8页 / 共23页
计算机网络实验报告.docx_第9页
第9页 / 共23页
计算机网络实验报告.docx_第10页
第10页 / 共23页
计算机网络实验报告.docx_第11页
第11页 / 共23页
计算机网络实验报告.docx_第12页
第12页 / 共23页
计算机网络实验报告.docx_第13页
第13页 / 共23页
计算机网络实验报告.docx_第14页
第14页 / 共23页
计算机网络实验报告.docx_第15页
第15页 / 共23页
计算机网络实验报告.docx_第16页
第16页 / 共23页
计算机网络实验报告.docx_第17页
第17页 / 共23页
计算机网络实验报告.docx_第18页
第18页 / 共23页
计算机网络实验报告.docx_第19页
第19页 / 共23页
计算机网络实验报告.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机网络实验报告.docx

《计算机网络实验报告.docx》由会员分享,可在线阅读,更多相关《计算机网络实验报告.docx(23页珍藏版)》请在冰点文库上搜索。

计算机网络实验报告.docx

计算机网络实验报告

学生学号

实验课成绩

学生实验报告书

 

实验课程名称《计算机网络》

开课学院计算机科学与技术学院

指导老师姓名

学生姓名

学生专业班级

 

2012—2013学年第二学期

 

实验课程名称:

计算机网络

实验项目名称

获取网卡的MAC地址

实验成绩

实验者

专业班级

组别

同组者

实验日期

年月日

第一部分:

实验分析与设计(可加页)

一、实验内容描述(问题域描述)

内容:

设计一个程序,使得能够获取本机安装的以太网卡的物理地址

基本要求:

一人独立完成。

可显示运行机器的MAC地址。

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

MAC地址:

在局域网中,MAC(MediumAccessControl)地址,即物理地址,用来定义网络设备的位置。

在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址。

因此一个网卡会有一个全球唯一固定的MAC地址,但可对应多个ip地址。

(一)、两种不同的MAC帧格式

常用的以太网MAC帧格式有两种标准,一种是DIXEthernetV2标准;另一种是IEEE的802.3标准。

目前MAC帧最常用的是以太网V2的格式。

一个地址块可以生成2^24个不同的地址。

这种48位地址称为MAC-48,它的通用名称是EUI-48。

“MAC地址”实际上就是适配器地址或适配器标识符EUI-48。

(二)、MAC层的硬件地址

1、在局域网中,硬件地址又称物理地址或MAC地址,它是数据帧在MAC层传输的一个非常重要的标识符。

2、网卡从网络上收到一个MAC帧后,首先检查其MAC地址,如果是发往本站的帧就收下;否则就将此帧丢弃。

单击开始,找到命令提示符,进入后输入ipconfig/all即可获取MAC地址,该地址可以作为用作检查用程序检测到MAC地址的对错。

通过调用一些计算机的命令函数,获取IP,各种适配器的信息,然后通过关键字查找到以太网适配器,进一步找到MAC地址,其中用到了indexOf,subString等函数。

三、主要仪器设备及耗材

Windows7,Eclipse,JDK1.6

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

程序如下:

Packagemac;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

publicclassMac{

publicstaticStringgetMACAddress()

{

Stringmac=null;

BufferedReaderbufferedReader=null;

Processprocess=null;

try{

process=Runtime.getRuntime().exec("ipconfig/all");//windows下的命令,显示信息中包含有mac地址信息,runtime是本地命令

bufferedReader=newBufferedReader(newInputStreamReader(process.getInputStream()));

Stringline=null;

intindex=-1;

while((line=bufferedReader.readLine())!

=null)

{

if(line.indexOf("以太网适配器")>=0)//寻找标示字符串以太网适配器,indexOf()返回指定字符在此字符串中第一次出现处的索引

{

while((line=bufferedReader.readLine())!

=null)

{

index=line.indexOf("物理地址");//寻找标示字符串【物理地址】

if(index>=0)

{//找到了

index=line.indexOf(":

");//寻找":

"的位置

if(index>=0)

{

mac=line.substring(index+1).trim();//取出mac地址并去除2边空格

//trim()用来删除左右两边空格substring()用来返回一个新的字符串

//它是此字符串的一个子字符串。

该子字符串始于指定索引处的字符,一直到此字符串末尾。

break;

}

}

}

}

}

}catch(IOExceptione){

System.out.println("出现异常");

}finally{//finally的作用是无论程序是否发生异常都会执行的部分

try{

if(bufferedReader!

=null){

bufferedReader.close();

}

}catch(IOExceptione1){

e1.printStackTrace();//与System.out.println("异常")相同

}

bufferedReader=null;

process=null;

}

returnmac;

}

publicstaticvoidmain(String[]argc){

Stringmac=getMACAddress();

System.out.println("MAC地址是:

"+mac);

}

}

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

程序运行结果如下:

 

程序运行正常后,把结果与在dos详细信息对比:

以太网适配器本地连接:

物理地址......24-B6-FD-09-5D-55

结果一样。

 

三、实验小结、建议及体会

通过这次试验,我深层次的了解了电脑上的一些与网络,信息传输,以及五层体系结构中的数据链路层中的MAC地址的应用以及各式,MAC地址就是物理地址,是确认一台电脑的唯一标识,在网卡上标注。

获取MAC地址的一种方式就是在DOS下输入ipconfig/all,显示一些本机的相关信息,就可以查看得到机器的物理地址。

MAC地址主要在物理层和数据链路层应用,装载IP数据报。

编程过程中查找了一些资料,一些函数的运用,如exec,Trim,subString等,在以后的学习中要多实践,多运用一些不熟悉的函数,加深对系统库的掌握程度,使编程更加熟练。

 

实验课程名称:

计算机网络

实验项目名称

基于Socket的网络通信设计

实验成绩

实验者

专业班级

组别

同组者

万灿

实验日期

年月日

第一部分:

实验分析与设计(可加页)

一、实验内容描述(问题域描述)

内容:

综合运用网络协议、编程语言、API和图形界面实现基于socket建立、监听、连接、发送数据和接收数据的网络通信程序。

基本要求:

两人一组为单位,一个负责发送程序设计,一个负责接收程序设计,程序设计

完成后可以进行字符数据收发或文件传输。

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。

本次实验主要是针对TCP开发程序,每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。

即:

TCP传输数据的过程:

服务器端程序在本机的某个端口上监听,等待客户端连接此端口,一旦客户端连接到了此端口,服务器端和客户端就可以进行数据传输了,数据传输结束后,关闭连接。

通过服务器的监听,accept到客户端发来的信息,对服务器的IP地址与端口号进行确认后,服务器和客户端开始通信,采用图形界面的方式来显示服务器与客户端的连接通信。

 

三、主要仪器设备及耗材

Windows7,Eclipse,JDK1.6

 

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

服务器程序如下:

packagesocket1;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjava.io.*;

import.*;

publicclassFuwuqi

{

publicstaticvoidmain(String[]args)

{

newServer();

}

}

classServer

{

staticintport=0;

staticintstartStatus=0;

@SuppressWarnings({"unused","static-access"})

Server()

{

try{

ServerFrameserverFrame=newServerFrame("服务器");

while((startStatus==0)||(port==0)){

Thread.currentThread().sleep(120);

}

ServerSocketserverSocket=newServerSocket(port,6);

intclientSort=0;

for(inti=0;;i++){

Socketsocket=serverSocket.accept();

clientSort++;

PrintWriterout=newPrintWriter(socket.getOutputStream());

BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));

Threadth=newThread(newCommunicate(socket,clientSort,out,in));

th.start();

}

}catch(Exceptionm){

System.out.println("ERROR"+m);

}

}

}

//线程运行类

classCommunicateimplementsRunnable{

intclientSort;

Socketsocket;

PrintWriterout;

BufferedReaderin;

JTextAreaarea3;

Communicate(Socketsocket,intclientSort,PrintWriterout,BufferedReaderin)

{

this.socket=socket;

this.clientSort=clientSort;

this.out=out;

this.in=in;

}

publicvoidrun()

{

try{

area3=newJTextArea();

@SuppressWarnings("unused")

ClientWithServerclientWithServer=newClientWithServer(clientSort,out,area3);

out.println("已成功连接至服务器.");

out.flush();

StringacceptString;

while(!

(acceptString=in.readLine()).equals("bye")){

area3.append("Client:

"+acceptString+"\n");

}

in.close();

out.close();

socket.close();

}catch(Exceptiong){

System.out.println("Error:

"+g);

}

}

}

//服务器与客户端通信窗口

classClientWithServer{

JFrameframe3;

JTextAreaarea3;

JTextFieldfield3;

JButtonbutton3;

intx=200;

inty=150;

intwidth=400;

intheight=400;

PrintWriterout;

ClientWithServer(intclientRank,PrintWriterout,JTextAreaar){

this.out=out;

area3=ar;

System.out.println("4\n");

frame3=newJFrame("客户端"+clientRank);

frame3.setLayout(null);

frame3.setLocation(x,y);

frame3.setSize(width,height);

JPanelpanel3=newJPanel();

JScrollPanescrollPane3=newJScrollPane(area3);

frame3.add(scrollPane3);

frame3.add(panel3);

scrollPane3.setLocation(0,0);

scrollPane3.setSize(width,(height*4/5));

scrollPane3.setBackground(Color.WHITE);

panel3.setLocation(0,(height*4/5));

panel3.setSize(width,(height/5));

panel3.setBackground(Color.LIGHT_GRAY);

field3=newJTextField(25);

panel3.add(field3);

field3.addActionListener(newActionFieldButton());

field3.setLocation((width/70),(height*2/5));

button3=newJButton("Send");

panel3.add(button3);

button3.addActionListener(newActionFieldButton());

button3.setLocation((18*width/19),(height*5/7));

button3.setSize(35,23);

frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame3.setResizable(false);

frame3.setVisible(true);

}

classActionFieldButtonimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

out.println(field3.getText());

out.flush();

area3.append("Server:

"+field3.getText()+"\n");

field3.setText("");

}

}

}

//设置端口号和启动服务器窗口

classServerFrame{

JFrameframe1;

staticJTextAreaarea1;

JButtonbuttonPort;

JButtonbuttonStart;

intx1=700;

inty1=150;

intwidth1=400;

intheight1=400;

ServerFrame(Strings){

frame1=newJFrame(s);

frame1.setLayout(null);

frame1.setLocation(x1,y1);

frame1.setSize(width1,height1);

JPanelpanel1=newJPanel();

frame1.add(panel1);

panel1.setLocation(0,0);

panel1.setSize(width1,(height1*60/500));

panel1.setLayout(newFlowLayout(FlowLayout.LEFT,60,10));

buttonPort=newJButton("设置端口号");

panel1.add(buttonPort);

buttonPort.addActionListener(newActionPort());

buttonPort.setSize(50,23);

buttonStart=newJButton("启动服务器");

panel1.add(buttonStart);

buttonStart.addActionListener(newActionStart());

buttonStart.setSize(50,23);

area1=newJTextArea();

JScrollPanescrollPane1=newJScrollPane(area1);

frame1.add(scrollPane1);

scrollPane1.setLocation(0,(height1*60/500));

scrollPane1.setSize(width1,(height1*420/500));

area1.setBackground(Color.LIGHT_GRAY);

frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame1.setResizable(false);

frame1.setVisible(true);

}

//监听启动服务器按钮

classActionStartimplementsActionListener

{

publicvoidactionPerformed(ActionEvente)

{

Server.startStatus=1;

area1.append("服务器已启动.\n");

}

}

}

//监听端口设置键

classActionPortimplementsActionListener{

staticJFrameframe2;

staticJTextFieldfield2;

JButtonbuttonok;

publicvoidactionPerformed(ActionEvente)

{

frame2=newJFrame("端口号设置");

frame2.setLayout(newFlowLayout(FlowLayout.CENTER,100,10));

frame2.setLocation(800,300);

frame2.setSize(350,200);

field2=newJTextField(10);

frame2.add(field2);

field2.addActionListener(newActionPortSet());

buttonok=newJButton("确定");

frame2.add(buttonok);

buttonok.addActionListener(newActionPortSet());

frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame2.setResizable(true);

frame2.setVisible(true);

}

}

//监听端口设置窗口

classActionPortSetimplementsActionListener

{

publicvoidactionPerformed(ActionEvente)

{

try

{

Server.port=Integer.parseInt(ActionPort.field2.getText());

ActionPort.field2.setText("");

ServerFrame.area1.append("您的服务器端口号设置为:

"+Server.port+"\n");

ActionPort.frame2.setVisible(true);

}

catch(NumberFormatExceptionm)

{

System.out.println("ERROR"+m);

}

}

}

客户端程序如下:

packagesocket1;

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

import.*;

importjavax.swing.*;

 

@SuppressWarnings("serial")

publicclassClientextendsJFrame

{

staticStringip;

staticintport=0;

staticPrintWriterout;//类Print

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2