计算机网络实验8.docx
《计算机网络实验8.docx》由会员分享,可在线阅读,更多相关《计算机网络实验8.docx(18页珍藏版)》请在冰豆网上搜索。
![计算机网络实验8.docx](https://file1.bdocx.com/fileroot1/2023-1/27/a6041b90-c56d-40de-894f-f57580157d6f/a6041b90-c56d-40de-894f-f57580157d6f1.gif)
计算机网络实验8
学生学号
实验课成绩
武汉理工大学
学生实验报告书
实验课程名称《计算机网络》
开课学院计算机科学与技术学院
指导老师姓名******
学生姓名****
学生专业班级*********
2010—2011学年第二学期
实验课程名称:
计算机网络
实验项目名称
求MAC地址
实验成绩
实验者
##
专业班级
##
组别
同组者
实验日期
年月日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
1、实验目的
1.1了解以太网帧的构成,了解各个字段的含义
1.2能够识别不同的MAC地址,并理解MAC地址的作用
2、实验要求
2.1获取本地MAC地址
2.2获取无线网络的MAC地址
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)
1、实验原理
在命令提示符下输入ipconfig/all可以得到本地和无线网络的MAC地址,因此可以用一个进程调用此命令,然后通过字符串的匹配得到相应的字段,按MAC地址的格式输出
2实验步骤
2.1getLocalMACAddress函数调用一个process执行ipconfig/all,匹配"Ethernetadapter本地连接",得到本地MAC地址
2.2getWirelessNetworkMACAddress函数调用一个process执行ipconfig/all匹配"Ethernetadapter无线网络连接",得到无线网络MAC地址
2.3在main函数中调用getLocalMACAddress函数和getWirelessNetworkMACAddress函数,输出本地MAC地址和无线网络MAC地址
3、主要仪器设备及耗材
1、微机
2、NetBeansIDE6.5.1
3、WPS文字
第二部分:
实验调试与结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
1、开始->运行->cmd->ipconfig/all
2、启动NetBeansIDE6.5.1->运行getMAC包下的get2mac
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
1、命令提示符下的本地MAC地址和无线网络MAC地址
2、Java程序得到的本地MAC地址和无线网络MAC地址
3、结果分析
Java程序所求的本地MAC地址和无线网络MAC地址与命令提示符下得到的MAC地址相同
三、实验小结、建议及体会
此实验的原理就是调用进程执行命令提示符下的命令和字符串的匹配,用这种方法还可以得到ip、mask、gateway、DHCPserver和DNSserver。
附(源代码)
packagesocket;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
publicclassget2mac{
//本地MAC地址
publicstaticStringgetLocalMACAddress()
{
Stringlocalmac=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("Ethernetadapter本地连接")>=0)//寻找标示字符串以太网适配器
{
while((line=bufferedReader.readLine())!
=null){
index=line.indexOf("PhysicalAddress");//寻找标示字符串[physicaladdress]
if(index>=0){//找到了
index=line.indexOf(":
");//寻找":
"的位置
if(index>=0){
localmac=line.substring(index+1).trim();//取出mac地址并去除2边空格
break;
}
}
}
}
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(bufferedReader!
=null){
bufferedReader.close();
}
}catch(IOExceptione1){
e1.printStackTrace();
}
bufferedReader=null;
process=null;
}
returnlocalmac;
}
//无线网络连接的物理地址:
publicstaticStringgetWirelessNetworkMACAddress()
{
Stringwirelessmac=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("Ethernetadapter无线网络连接")>=0)//寻找标示字符串以太网适配器
{
while((line=bufferedReader.readLine())!
=null){
index=line.indexOf("PhysicalAddress");//寻找标示字符串[physicaladdress]
if(index>=0){//找到了
index=line.indexOf(":
");//寻找":
"的位置
if(index>=0){
wirelessmac=line.substring(index+1).trim();//取出mac地址并去除2边空格
break;
}
}
}
}
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(bufferedReader!
=null){
bufferedReader.close();
}
}catch(IOExceptione1){
e1.printStackTrace();
}
bufferedReader=null;
process=null;
}
returnwirelessmac;
}
publicstaticvoidmain(String[]argc){
Stringlocalmac=getLocalMACAddress();
System.out.println("本地MAC地址是:
"+localmac);
Stringwirelessmac=getWirelessNetworkMACAddress();
System.out.println("无线网络MAC地址是:
"+wirelessmac);
}
}
实验课程名称:
计算机网络
实验项目名称
客户端与服务器端通信
实验成绩
实验者
##
专业班级
##
组别
同组者
实验日期
年月日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
1、实验目的
1.1理解套接字(socket)通信的基本原理和机制
1.2理解进程间通信的机制。
2、实验要求:
2.1分别编写客服端和服务器端代码,建立客户端与服务器端之间正确的socket连结。
2.2客服端或服务器端输入"end"时,结束通信。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)
1、实验原理
本实验的通信模式为C/S模式,即在一个线程中一个进程处理C(client客服端),另一个进程处理S(server服务器端)。
2、实验步骤
2.1ServerSocketserver负责当前线程中C/S通信中的Socket对象的服务器端
2.2ServerSocketclient负责当前线程中C/S通信中的Socket对象的客服器端
2.3在server和client中对每一条输入与"end"匹配,相同时程序结束。
不同时可以继续进行通信
3、主要仪器设备及耗材
1、微机
2、NetBeansIDE6.5.1
第二部分:
实验调试与结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
启动NetBeansIDE6.5.1->运行socket包下的server->运行socket包下的client
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
1、运行server
server输出
2、运行client
2.1client输出
2.2server输出
3、client端输入“你好,能收到信息吗”,回车
3.1client端输出
3.2server端输出
4、server端输入“能”,回车
4.1server端输出
4.2client端输出
5、客户端输入“end”,回车
5.1client端输出
5.2server端输出
三、实验小结、建议及体会
这个实验在本机上用两个进程分别模拟客服端和服务器端,用socket通信。
通过这个实验我理解了进程间通信的机制,要想进行远程通信,还必须再改进。
源代码)
//服务器端代码
packagesocket;
import.ServerSocket;
import.Socket;
importjava.io.BufferedReader;
importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
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(5678);//建立监听服务
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("end"))
{
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);
}
}
}
//客服端代码
packagesocket;
importjava.io.BufferedReader;
importjava.io.DataOutputStream;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStream;
import.Socket;
publicclassMyClientimplementsRunnable{
SocketclientSocket;
booleanflag=true;//标记是否结束
ThreadConnenThread;//用于向服务器端发送信息
BufferedReadercin;
DataOutputStreamcout;
publicstaticvoidmain(String[]args){
newMyClient().ClientStart();
}
privatevoidClientStart(){
try
{//连接服务器端,这里使用本机
clientSocket=newSocket("localhost",5678);
System.out.print("已建立连接!
");
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("end"))
{
flag=false;
ConnenThread.interrupt();
break;
}
}
cout.close();
os.close();
cin.close();
is.close();
clientSocket.close();//关闭Socket连接
System.exit(0);
}
}catch(Exceptione)
{
System.out.println(e);
}
}
publicvoidrun(){
while(true)
{
try{
intch;
while((ch=System.in.read())!
=-1)
{
cout.write((byte)ch);
if(ch=='\n')
cout.flush();
}
}catch(Exceptione)
{
System.out.println(e);
}
}
}
}
importjava.io.*;
import.*;
publicclassTalkserver
{
publicstaticvoidmain(Stringargs[])
{
try
{ServerSocketserver=null;
try{server=newServerSocket(4700);}
catch(Exceptione){System.out.println("cannotlistento:
"+e);}
Socketsocket=null;
try{socket=server.accept();}
catch(Exceptione){
System.out.println("Error:
"+e);}
Stringline;
BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream()));
BufferedReadersin=newBufferedReader(newInputStreamReader(System.in));
PrintWriteros=newPrintWriter(socket.getOutputStream());
System.out.println("Client:
"+is.readLine());
System.out.print("you:
");
line=sin.readLine();
while(!
line.equals("bye"))
{
os.println(line);
os.flush();
//System.out.println("Server:
"+line);
System.out.println("Responds:
"+is.readLine());
System.out.print("you:
");
line=sin.readLine();
}
is.close();
os.close();
socket.close();
server.close();
}catch(Exceptione)
{
System.out.println("Error"+e);
}
}
}
D:
\socket\Talkclient.java源代码:
importjava.io.*;
import.*;
publicclassTalkclient
{
publicstaticvoidmain(Stringargs[])
{
try
{
Socketsocket=newSocket("127.0.0.1",4700);
BufferedReadersin=newBufferedReader(newInputStreamReader(System.in));
PrintWriteros=newPrintWriter(so