计算机网络实验3Word文档下载推荐.docx
《计算机网络实验3Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机网络实验3Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
Ethereal、IE、Java等软件。
实验内容:
一、查看课程配套的3个JAVAApplet演示
演示1:
GBN(回退N步)协议(显然同时最多只能发送5个Packet)
(1)KillPacket0
KillPacket0
(2)KillAcknoledgementofPacket0
演示2:
SR(选择重传)
(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"
))
Content-Type:
image/jpeg\r\n"
.gif"
image/gif\r\n"
Content-Length:
+numOfBytes+"
\r\n"
outToClient.write(fileInBytes,0,numOfBytes);
connectionSocket.close();
}
elseSystem.out.println("
BadRequestMessage"
System.out.println("
请求次数:
”+countnum++);
//输出请求次数
}