学生学号0121210680117 实验课成绩武汉理工大学学生实验报告书实验课程名称《计算机网络》开课学院计算机科学与技术学院指导老师姓名周兰采学生姓名柏扬学生专业班级软件1201 2013 —2014 学年第二学期实验课程名称:计算机网络实验项目名称获取网卡的MAC地址实验成绩实验者专业班级组别同组者实验日期第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)实验内容:编程获取以太网适配器的MAC地址。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)实验原理:在系统的cmd命令提示符中,我们输入ipconfig/all就可以看到本机上所有的适配器的具体内容如媒体状态、连接特定的DNS后缀、描述、物理地址、DHCP 已启用、自动配置已启用信息。
本实验是运用匹配的思想,先通过,在寻找匹配字符串物理地址,找到了就将:后面位置的内容赋值给mac,作为MAC地址,然后再主函数中输出即可。
实验代码如下:package socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class SystemTool {/***@return mac地址*/public static String getWindowsMACAddress(){String mac = null;BufferedReader bufferedReader = null;Process process = null;try {process = Runtime.getRuntime().exec("ipconfig /all");// windows 下的命令,显示信息中包含有mac地址信息bufferedReader = new BufferedReader(newInputStreamReader(process.getInputStream()));String line = null;int index = -1;while ((line = bufferedReader.readLine()) != null) {if (line.indexOf("以太网适配器")>=0) //寻找标示字符串以太网适配器{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边空格break;}}}}}} catch (IOException e) {e.printStackTrace();} finally {try {if (bufferedReader != null) {bufferedReader.close();}} catch (IOException e1) {e1.printStackTrace();}bufferedReader = null;process = null;}return mac;}public static void main(String[] argc) {String mac = getWindowsMACAddress();System.out.println("MAC地址是:"+mac);}}三、主要仪器设备及耗材PC机一台,Eclipse第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)编写完程序后,Eclipse会很明显地自动提示错误的地方,有的是没有导入包,有的是字符不一致等等,然后一一改正所有的提示错误,再运行,即可得到运行结果。
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)运行结果如下:三、实验小结、建议及体会在局域网中,硬件地址又称物理地址或者MAC地址,因为这种地址用在MAC 帧中,用来定义网络设备的位置。
在OSI模型中,第三层网络层负责 IP地址,第二层资料链结层则负责 MAC位址。
因此一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC位址。
本实验中就是采用匹配的思想去寻找个人计算机的MAC地址,刚开始习惯性去匹配physical address,结果输出结果为空,后来才在命令提示符里面运行一下,发现了错误所在,应该是去匹配【以太网适配器本地连接】,然后就改正,得出了正确的结果。
实验课程名称:计算机网络实验项目名称基于SOCKET的网络通信设计实验成绩实验者专业班级组别同组者实验日期第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)实验内容:基于SOCKET的网络通信设计。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)实验原理:SOCKET通信属于网络底层通信,它是网络上运行的两个程序间双向通信的一端,既可以接受请求,也可以发送请求,利用它可以较方便地进行网络上的数据传输。
SOCKET是实现客户-服务器(client-server)模式的通信方式,它首先需要建立稳定的连接,然后以流的方式传输数据,实现网络通信。
SOCKET的原意是“插座”,在通信领域译为“套接字”,意思是将两个物品套在一起,在网络通信里的含义就是建立一个连接。
Socket通信的步骤如下:(1)在服务器创建一个ServcerSocket对象,并指定端口号;(2)运行ServcerSocket的accept()方法,等候客户端请求;(3)客户端创建一个Socket对象,指定计算机地址和端口号,向服务器端发出连接请求;(4)服务器端接收到客户端的请求后,创建Socket对象与客户端进行连接;(5)服务器端和客户端分别建立输入输出流,进行数据传输;(6)通信结束后,服务器端和客户端分别关闭相应的Socket连接;(7)服务器端程序运行结束后,调用ServcerSocket对象的close()方法停止等候客户端的请求。
服务器端代码如下:package socket;import .ServerSocket;import .Socket;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;public class MyServer implements Runnable{ServerSocket server=null; //负责当前线程中C/S通信中的Socket对象Socket clientSocket; //标记是否结束boolean flag=true; //向客户端发送信息的线程Thread ConnenThread; //输入流对象BufferedReader sin; //输出流对象DataOutputStream sout;public static void main(String[] args) {MyServer MS=new MyServer();MS.ServerStart();}public void ServerStart() {try{server=new ServerSocket(1234); //建立监听服务System.out.print("端口号:"+server.getLocalPort());while(flag){clientSocket=server.accept();System.out.print("连接已建立完毕!");InputStream is=clientSocket.getInputStream();sin=new BufferedReader(new InputStreamReader(is));OutputStream os=clientSocket.getOutputStream();sout=new DataOutputStream(os);ConnenThread=new Thread(this);ConnenThread.start(); //启动线程,向客户端发送信息String aline;while((aline=sin.readLine())!=null) //从客户端读入信息{System.out.println(aline);if(aline.equals("bye")){flag= false;ConnenThread.interrupt(); //线程中断break;}}sout.close(); //关闭流os.close();sin.close();is.close();clientSocket.close(); //关闭Socket连接System.exit(0); //程序运行结束}}catch(Exception e){System.out.print(e);}}public void run() {while(true){try{int ch;while((ch=System.in.read())!=-1){ //从键盘接收字符并向客户端发送sout.write((byte)ch);if(ch=='\n')sout.flush(); //将缓冲区内容向客户端输出}}catch(Exception e){System.out.println(e);}}}public void finalize() //析构函数{try{server.close(); //停止ServerSocket服务}catch(IOException e){System.out.println(e);}}}客户端代码如下:package socket;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .Socket;public class MyClient implements Runnable{Socket clientSocket;boolean flag=true; //标记是否结束Thread ConnenThread; //用于向服务器端发送信息BufferedReader cin;DataOutputStream cout;public static void main(String[] args) {new MyClient().ClientStart();}private void ClientStart() {try{ //连接服务器端,这里使用本机clientSocket=new Socket("localhost",1234);System.out.print("已建立连接!");while(flag){ //获取流对象InputStream is=clientSocket.getInputStream();cin=new BufferedReader(new InputStreamReader(is));OutputStream os=clientSocket.getOutputStream();cout=new DataOutputStream(os);ConnenThread=new Thread(this);ConnenThread.start(); //启动线程,向服务器端发送信息String aline;while((aline=cin.readLine())!=null){ //接收服务器端的数据System.out.println(aline);if(aline.equals("bye")){flag= false;ConnenThread.interrupt();break;}}cout.close();os.close();cin.close();is.close();clientSocket.close(); //关闭Socket连接System.exit(0);}}catch(Exception e){System.out.println(e);}}public void run() {while(true){try{int ch;while((ch=System.in.read())!=-1){cout.write((byte)ch);if(ch=='\n')cout.flush();}}catch(Exception e){System.out.println(e);}}}}三、主要仪器设备及耗材PC机一台,Eclipse第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)编写完程序后,Eclipse会很明显地自动提示错误的地方,有的是没有导入包,有的是字符不一致等等,然后一一改正所有的提示错误,再运行,即可得到运行结果。