计算机网络实验3.docx
《计算机网络实验3.docx》由会员分享,可在线阅读,更多相关《计算机网络实验3.docx(18页珍藏版)》请在冰豆网上搜索。
计算机网络实验3
计算机网络课程实验三
实验目的:
让学生通过实验,对网络原理有更深刻和更直观的认识;掌握网络基本技术,例如:
组网、截获/分析数据包、网络编程等;为以后更深入的学习和利用计算机网络打下一个好的基础;
实验环境:
与因特网连接的计算机网络系统;主机操作系统为Windows;Ethereal、IE、Java等软件。
实验内容:
一、查看课程配套的3个JAVAApplet演示
演示1:
GBN(回退N步)协议(显然同时最多只能发送5个Packet)
(1)KillPacket0
KillPacket0
(2)KillAcknoledgementofPacket0
演示2:
SR(选择重传)
(1)KillPacket0
KillPacket0
(2)没有KillPacket
演示3:
TCP流量控制
文件大小4Kb,缓存大小2Kb
WhenHostAreceivesanacknowledgmentwithWIN=0
HostAsendsapacketwithonebyteofdata
二、利用Ethereal研究TCP传输过程
操作步骤:
1利用学校BBS的“自定义头像”上传功能,完成本地主机到远程服务器的TCP传输。
步骤:
登陆,选择“个人工具箱”中的“个人文件上传”,在新窗口中通过“浏览”按钮选择附件中的“face.gif”。
2启动Ethereal,开始一个新的分组俘获。
3回到“个人文件上传”窗口,点击“上传”,上传成功后,在页面的下方将出现face.gif图象。
4停止Ethereal分组俘获。
5在筛选规则中输入“tcp”,将看到主机和服务器之间传输的一系列的tcp和http报文。
得到的分组截图如下:
由此可知:
客户端主机的IP地址202.38.64.3
服务器的IP地址210.45.73.76
TCP源端口号58207
序列号15118
三、Socket编程
1构造一个简单的Web服务器
运行结果截图如下:
这表明了这段代码只能响应单个请求。
2在上面程序的基础上添加部分代码,使WebServer.Java能够响应多个请求,并在主机端显示请求次数。
试写代码如下:
importjava.io.*;
import.*;
importjava.util.*;
classWebServer{
publicstaticvoidmain(Stringargs[])throwsException{
StringrequestMessageLine;
StringfileName="";
intcountnum=0;//计数器
while(true)//加上循环,允许响应多次请求
{
ServerSocketlistenSocket=newServerSocket(6789);
SocketconnectionSocket=listenSocket.accept();
BufferedReaderinFromClient=newBufferedReader(newInputStreamReader(connectionSocket.getInputStream()));
DataOutputStreamoutToClient=newDataOutputStream(connectionSocket.getOutputStream());
requestMessageLine=inFromClient.readLine();
StringTokenizertokenizedLine=newStringTokenizer(requestMessageLine);
if(tokenizedLine.nextToken().equals("GET")){
fileName=tokenizedLine.nextToken();
if(fileName.startsWith("/")==true)
fileName=fileName.substring
(1);
Filefile=newFile(fileName);
intnumOfBytes=(int)file.length();
FileInputStreaminFile=newFileInputStream(fileName);
byte[]fileInBytes=newbyte[numOfBytes];
inFile.read(fileInBytes);
outToClient.writeBytes("HTTP/1.0200DocumentFollows\r\n");
if(fileName.endsWith(".jpg"))
outToClient.writeBytes("Content-Type:
image/jpeg\r\n");
if(fileName.endsWith(".gif"))
outToClient.writeBytes("Content-Type:
image/gif\r\n");
outToClient.writeBytes("Content-Length:
"+numOfBytes+"\r\n");
outToClient.writeBytes("\r\n");
outToClient.write(fileInBytes,0,numOfBytes);
connectionSocket.close();
}
elseSystem.out.println("BadRequestMessage");
System.out.println("请求次数:
”+countnum++);//输出请求次数
}
}