武汉理工大学计算机网络实验报告Word文件下载.docx
- 文档编号:21979993
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:14
- 大小:185.46KB
武汉理工大学计算机网络实验报告Word文件下载.docx
《武汉理工大学计算机网络实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《武汉理工大学计算机网络实验报告Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
编程获取以太网适配器的MAC地址。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)
实验原理:
在系统的cmd命令提示符中,我们输入ipconfig/all就可以看到本机上所有的适配器的具体内容如媒体状态、连接特定的DNS后缀、描述、物理地址、DHCP已启用、自动配置已启用信息。
本实验是运用匹配的思想,先通过,在寻找匹配字符串物理地址,找到了就将:
后面位置的内容赋值给mac,作为MAC地址,然后再主函数中输出即可。
实验代码如下:
packagesocket;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
publicclassSystemTool{
/**
*@returnmac地址
*/
publicstaticStringgetWindowsMACAddress()
{
Stringmac=null;
BufferedReaderbufferedReader=null;
Processprocess=null;
try{
process=Runtime.getRuntime().exec("
ipconfig/all"
);
//windows下的命令,显示信息中包含有mac地址信息
bufferedReader=newBufferedReader(newInputStreamReader(process.getInputStream()));
Stringline=null;
intindex=-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(IOExceptione){
e.printStackTrace();
}finally{
if(bufferedReader!
bufferedReader.close();
}catch(IOExceptione1){
e1.printStackTrace();
bufferedReader=null;
process=null;
returnmac;
publicstaticvoidmain(String[]argc){
Stringmac=getWindowsMACAddress();
System.out.println("
MAC地址是:
+mac);
}
三、主要仪器设备及耗材
PC机一台,Eclipse
第二部分:
实验调试与结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
编写完程序后,Eclipse会很明显地自动提示错误的地方,有的是没有导入包,有的是字符不一致等等,然后一一改正所有的提示错误,再运行,即可得到运行结果。
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
运行结果如下:
三、实验小结、建议及体会
在局域网中,硬件地址又称物理地址或者MAC地址,因为这种地址用在MAC帧中,用来定义网络设备的位置。
在OSI模型中,第三层网络层负责IP地址,第二层资料链结层则负责MAC位址。
因此一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC位址。
本实验中就是采用匹配的思想去寻找个人计算机的MAC地址,刚开始习惯性去匹配physicaladdress,结果输出结果为空,后来才在命令提示符里面运行一下,发现了错误所在,应该是去匹配【以太网适配器本地连接】,然后就改正,得出了正确的结果。
基于SOCKET的网络通信设计
基于SOCKET的网络通信设计。
SOCKET通信属于网络底层通信,它是网络上运行的两个程序间双向通信的一端,既可以接受请求,也可以发送请求,利用它可以较方便地进行网络上的数据传输。
SOCKET是实现客户-服务器(client-server)模式的通信方式,它首先需要建立稳定的连接,然后以流的方式传输数据,实现网络通信。
SOCKET的原意是“插座”,在通信领域译为“套接字”,意思是将两个物品套在一起,在网络通信里的含义就是建立一个连接。
Socket通信的步骤如下:
(1)在服务器创建一个ServcerSocket对象,并指定端口号;
(2)运行ServcerSocket的accept()方法,等候客户端请求;
(3)客户端创建一个Socket对象,指定计算机地址和端口号,向服务器端发出连接请求;
(4)服务器端接收到客户端的请求后,创建Socket对象与客户端进行连接;
(5)服务器端和客户端分别建立输入输出流,进行数据传输;
(6)通信结束后,服务器端和客户端分别关闭相应的Socket连接;
(7)服务器端程序运行结束后,调用ServcerSocket对象的close()方法停止等候客户端的请求。
服务器端代码如下:
import.ServerSocket;
import.Socket;
importjava.io.DataOutputStream;
importjava.io.InputStream;
importjava.io.OutputStream;
publicclassMyServerimplementsRunnable{
ServerSocketserver=null;
//负责当前线程中C/S通信中的Socket对象
SocketclientSocket;
//标记是否结束
booleanflag=true;
//向客户端发送信息的线程
ThreadConnenThread;
//输入流对象
BufferedReadersin;
//输出流对象
DataOutputStreamsout;
publicstaticvoidmain(String[]args){
MyServerMS=newMyServer();
MS.ServerStart();
publicvoidServerStart(){
try{
server=newServerSocket(1234);
//建立监听服务
System.out.print("
端口号:
+server.getLocalPort());
while(flag)
clientSocket=server.accept();
System.out.print("
连接已建立完毕!
InputStreamis=clientSocket.getInputStream();
sin=newBufferedReader(newInputStreamReader(is));
OutputStreamos=clientSocket.getOutputStream();
sout=newDataOutputStream(os);
ConnenThread=newThread(this);
ConnenThread.start();
//启动线程,向客户端发送信息
Stringaline;
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(Exceptione)
{System.out.print(e);
}
publicvoidrun(){
while(true)
try{
intch;
while((ch=System.in.read())!
=-1)
{//从键盘接收字符并向客户端发送
sout.write((byte)ch);
if(ch=='
\n'
)
sout.flush();
//将缓冲区内容向客户端输出
}catch(Exceptione)
System.out.println(e);
publicvoidfinalize()//析构函数
{
try
server.close();
//停止ServerSocket服务
}catch(IOExceptione)
System.out.println(e);
客户端代码如下:
publicclassMyClientimplementsRunnable{
//用于向服务器端发送信息
BufferedReadercin;
DataOutputStreamcout;
newMyClient().ClientStart();
privatevoidClientStart(){
{//连接服务器端,这里使用本机
clientSocket=newSocket("
localhost"
1234);
已建立连接!
while(flag)
{//获取流对象
InputStreamis=clientSocket.getInputStream();
cin=newBufferedReader(newInputStreamReader(is));
OutputStreamos=clientSocket.getOutputStream();
cout=newDataOutputStream(os);
ConnenThread=newThread(this);
ConnenThread.start();
//启动线程,向服务器端发送信息
Stringaline;
while((aline=cin.readLine())!
=null)
{//接收服务器端的数据
System.out.println(aline);
if(aline.equals("
{
flag=false;
ConnenThread.interrupt();
break;
}
cout.close();
os.close();
cin.close();
is.close();
clientSocket.close();
System.exit(0);
}catch(Exceptione)
cout.write((byte)ch);
cout.flush();
三、主要仪器设备及耗材
PC机一台,Eclipse
编写完程序后,Eclipse会很明显地自动提示错误的地方,有的是没有导入包,有的是字符不一致等等,然后一一改正所有的提示错误,再运行,即可得到运行结果。
运行结果如下:
首先运行服务器端,出现如下图的界面,因为是建立了进程,所以一直处于运行状态,客户端也是这样;
然后运行客户端,显示已建立连接!
则向服务器端发送信息并按enter键,开始通信;
可以看到服务器端的运行界面,服务器端收到信息了,并作出回答;
客户端收到服务器端的回答,通信可以继续,但是本实验简单说明一下即可,我们试一下程序的功能,输入bye,则结束通信;
socket的英文原义是“孔”或“插座”。
作为4BDSUNIX的进程通信机制,取后一种意思。
通常也称作"
套接字"
,用于描述IP地址和端口,是一个通信链的句柄。
在Internet上的主机一般运行了多个服务软件,同时提供几种服务。
每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
本实验是在同一台计算机上运行这两个程序,需要先运行服务器端程序,登建立连接后在启动客户端,发送消息开始通信,两个操作基本相同,只是建立连接的方式不同。
服务器端创建ServcerSocket对象,并调用accept()方法等候客户端的请求,而客户端是创建Socket对象发送请求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工大学 计算机网络 实验 报告