网络实验指导书.docx
- 文档编号:9899766
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:55
- 大小:388.26KB
网络实验指导书.docx
《网络实验指导书.docx》由会员分享,可在线阅读,更多相关《网络实验指导书.docx(55页珍藏版)》请在冰豆网上搜索。
网络实验指导书
《计算机网络》实验指导书
刘晓烽
哈尔滨工业大学
计算机科学与技术学院
2013年5月15日
前言
《计算机网络》课程是计算机科学与技术专业的重要专业课程之一。
随着计算机网络技术的迅速发展和在当今信息社会中的广泛应用,给《计算机网络》课程的教学提出了新的更高的要求。
由于计算机网络是一门实践性较强的技术,课堂教学应该与实践环节紧密结合。
将《计算机网络》课程建设成世界一流的课程,是近期《计算机网络》课程努力的方向。
希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,使《计算机网络》成为具有世界一流水平的课程。
本学期授课教师为刘晓烽老师,参与网络课程助教环节的教师为闫庆军、胡刚、潘燕华同学、门雪莹同学,参与实验课程的实验教师刘晓烽老师、娄久老师、闫庆军、胡刚、韩宝梅、罗日新、许洪春、潘燕华、门雪莹。
实验要求
计算机网络是现代信息社会最重要的基础设施之一。
在过去十几年里得到了迅速的发展和应用。
《计算机网络》课程实验的目的是为了使学生在课程学习的同时,通过在一个计算机网络环境中的实际操作,对现代计算机网络的基本功能有一个初步的了解;通过实现一个数据链路层协议,掌握计算机网络通信协议的基本实现技术;通过一个简单文件传送协议的设计和实现,了解计算机网络高层协议设计实现的环境和方法;还提供了一些可以选作的实验以供有余力有兴趣的同学进一步提高。
总之,通过上述实验环节,使学生加深了解和更好地掌握《计算机网络》课程教学大纲要求的内容。
在《计算机网络》的课程实验过程中,要求学生做到:
(1)每次实验前应预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现情况提前做出思考和分析。
(2)仔细观察上机和上网操作时出现的各种现象,记录主要情况,做出必要说明和分析。
(3)认真书写实验报告。
实验报告包括实验目的和要求,实验情况及其分析。
对需要编程的实验,写出程序设计说明,给出源程序框图和清单。
(4)遵守机房纪律,服从辅导教师指挥,爱护实验设备。
(5)实验课程不迟到。
如有事不能出席,所缺实验一般不补。
实验的验收将分为两个部分。
第一部分是上机操作,包括检查程序运行和即时提问。
第二部分是提交电子版的实验报告。
此外,网络实验采用当堂检查方式,每个实验都应当在规定的时间内完成并检查通过,过期视为未完成该实验,不计成绩。
以避免集中检查方式产生的诸多不良问题,希望同学们抓紧时间,合理安排,认真完成。
实验一:
TCP/IP编程
1、实验目的:
掌握Socket编程过程,编写简单的网络应用程序。
2、实验环境:
ØWindows9x/NT/2000/XP/2003
ØTCP/IP协议
3、编程工具:
Java(JCreatorIDE),c/c++(VC++6.0)
4、实验内容:
1)利用编程语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。
要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。
2)修改上述程序,分别基于TCP和UDP,实现服务器根据客户请求,将客户端指定的文件可靠地传输给客户。
如果服务器没有指定的文件,服务器将给客户返回一个信息,通知客户其请求文件不存在。
基于UDP的文件传输可以考虑利用“停等协议”保证其可靠性。
3)有条件的同学可以进一步改进2)的程序,使之更实用。
比如可以请求服务器先传输目录,然后客户根据目录请求传输文件等。
选作内容,加分项目:
(可以当堂完成或课下完成)
4)在2)的基础上,实现多线程的文件服务器。
即服务器可以同时为多个客户端传送文件。
实现的手段为对每一个客户端请求,服务器主线程创建一个新的线程为其传送文件,然后主线程返回,继续等待其它客户端的连接请求。
5、实验方式:
每位同学上机编程实验,实验指导教师现场指导。
6、参考内容:
6.1JAVA版本的socket编程样例
(1)基于TCP实现客户向服务器传输任意一个字符串的客户端程序:
TCPClient.java
importjava.io.*:
import.*:
classTCPClient{
publicstaticvoidmain(Stringargv[])throwsException
{
Stringsentence;
StringmodifiedSentence;
BufferedReaderinFromUser=
newBufferedReader(newInputStreamReader(System.in));
SocketclientSocket=newSocket(“hostname”,6789);//hostnameisserverdomainame
DataOutputStreamoutToServer=
newDataOutputStream(clientSocket.getOutputStream());
BufferedReaderinFromServer=
newBufferedReader(newInputStreamReader(
clientSocket.getInputStream()));
sentence=inFromUser.readLine();
outToServer.writeBytes(sentence+‘\n’);
modifiedSentence=inFromServer.readLine();
System.out.println(“FROMSERVER:
”+modifiedSentence);
clientSocket.close();
}
}
(2)基于TCP实现服务器将收到的字符串变换成大写后传回客户的服务器端程序:
TCPServer.java
importjava.io.*:
import.*:
classTCPServer{
publicstaticvoidmain(Stringargv[])throwsException
{
StringClientSentence;
StringcapitalizedSentence;
ServerSocketwelcomeSocket=newServerSocket(6789);
While(true){
SocketconnectionSocket=welcomeSocket.accept();
BufferedReaderinFromClient=
newBufferedReader(newInputStreamReader(
connectionSocket.getInputStream()));
DataOutputStreamoutToClient=
newDataOutputStream(connectionSocket.getOutputStream());
ClientSentence=infromClient.readLine();
capitalizedSentence=
clientSentence.toUpperCase()+‘\n’;
outToClient.writeBytes(capitalizedSentence);
}
}
}
(3)基于UDP实现客户向服务器传输任意一个字符串的客户端程序:
UDPClient.java
importjava.io.*:
import.*:
classUDPClient{
publicstaticvoidmain(Stringargs[])throwsException
{
BufferedReaderinfromUser=
newBufferedReader(newInputStreamReader(System.in));
DatagramSocketclientSocket=newDatagramSocket();
InetAddressIPAddress=InetAddress.getByName(“hostname”);
byte[]sendData=newbyte[1024];
byte[]receiveData=newbyte[1024];
Stringsentence=infromUser.readLine();
sendData=sentence.getBytes();
DatagramPacketsendPacket=
newDatagramPacket(sendData,sendData.length,
IPAddress,9876);
clientSocket.send(sendPacket);
DatagramPacketreceivePacket=
newDatagramPacket(receiveData,receiveData.length);
clientSocket.receive(receivePacket);
StringmodifiedSentence=
newstring(receivePacket.getData());
System.out.println(“FROMSERVER:
”+modifiedSentence);
clientSocket.close();
}
}
(4)基于UDP实现服务器将收到的字符串变换成大写后传回客户的服务器端程序:
UDPServer.java
importjava.io.*:
import.*:
classUDPServer{
publicstaticvoidmain(Stringargs[])throwsException
{
DatagramSocketserverSocket=newDatagramSocket(9876);
byte[]receiveData=newbyte[1024];
byte[]sendData=newbyte[1024];
while(true)
{
DatagramPacketreceivePacket=
newDatagramPacket(receiveData,receiveData.length);
serverSocket.receive(receivePacket);
Stringsentence=newString(receivePacket.getData());
InetAddressIPAddress=receivePacket.getAddress());
intport=receivePacket.getPort();
StringcapitalizedSentence=sentence.toUpperCase();
sendData=capitalizedSentence.getBytes();
DatagramPacketsendPacket=
newDatagramPacket(sendData,sendData.length,IPAddress,port);
serverSocket.send(sendPacket);
}
}
}
(5)实现服务器根据客户请求,将客户端指定的文件可靠地传输给客户。
如果服务器没有指定的文件,服务器将给客户返回一个信息,通知客户其请求文件不存在。
TCPFileClient.java
importjava.io.*:
import.*:
classTCPFileClient{
publicstaticvoidmain(Stringargv[])throwsException
{
Stringsentence;
StringmodifiedSentence;
BufferedReaderinFromUser=
newBufferedReader(newInputStreamReader(System.in));
SocketclientSocket=newSocket(“hostname”,6789);//hostnameisserverdomainame
DataOutputStreamoutToServer=
newDataOutputStream(clientSocket.getOutputStream());
BufferedReaderinFromServer=
newBufferedReader(newInputStreamReader(
clientSocket.getInputStream()));
System.out.println(“PleaseEnterFileName:
”);
sentence=inFromUser.readLine();
outToServer.writeBytes(sentence+‘\n’);
modifiedSentence=inFromServer.readLine();
System.out.println(“FROMSERVER:
”+modifiedSentence);
clientSocket.close();
}
}
TCPFileServer.java
importjava.io.*:
import.*:
classTCPFileServer{
publicstaticvoidmain(Stringargv[])throwsException
{
StringClientSentence;
StringcapitalizedSentence;
ServerSocketwelcomeSocket=newServerSocket(6789);
While(true){
SocketconnectionSocket=welcomeSocket.accept();
BufferedReaderinfromClient=
newBufferedReader(newInputStreamReader(
connectionSocket.getInputStream()));
DataOutputStreamoutToClient=
newDataOutputStream(
connectionSocket.getOutputStream());
ClientSentence=infromClient.readLine();
try{
RandomAccessFilein=newRandomAccessFile(
ClientSentence,”r”);
Strings;
Stringtotal=”“;
While((s=in.readLine())!
=null)
total=total+s;
outToClient.writeBytes(total+’\n’);
in.close();
}
catch(Exceptione){
outToClient.writeBytes(“文件不存在!
”);
}
}
}
}
(6)实现可以请求服务器先传输目录,然后客户根据目录再请求传输文件的网络应用。
请同学们自己编写。
6.2C版本的socket编程样例
Udp服务器端——等待接收客户端传来的“hello”并打印
#pragmacomment(lib,"wsock32.lib")
#include
#include
voidmain()
{
WORDwVersionRequested;
WSADATAwsaData;
interr;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!
=0)
{
return;
}
if(LOBYTE(wsaData.wVersion)!
=1||HIBYTE(wsaData.wVersion)!
=1)
{
WSACleanup();
return;
}
SOCKETsockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_INaddrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
SOCKADDR_INaddrClient;
intlen=sizeof(SOCKADDR);
charrecvBuf[100];
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf("%s\n",recvBuf);
closesocket(sockSrv);
WSACleanup();
}
Udp客户端——向服务器端发送“hello”字符串
#include
#include
#pragmacomment(lib,"wsock32.lib")
voidmain()
{
WORDwVersionRequested;
WSADATAwsaData;
interr;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!
=0){
return;
}
if(LOBYTE(wsaData.wVersion)!
=1||
HIBYTE(wsaData.wVersion)!
=1){
WSACleanup();
return;
}
SOCKETsockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_INaddrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
sendto(sockClient,"Hello",strlen("Hello")+1,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
}
Tcp服务器端------接收客户端发来的“hello”字符串
#pragmacomment(lib,"wsock32.lib")
#include
#include
voidmain()
{
WORDwVersionRequested;
WSADATAwsaData;
interr;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!
=0){
return;
}
if(LOBYTE(wsaData.wVersion)!
=1||
HIBYTE(wsaData.wVersion)!
=1){
WSACleanup();
return;
}
SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_INaddrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_INaddrClient;
intlen=sizeof(SOCKADDR);
while
(1)
{
SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
charsendBuf[50];
sprintf(sendBuf,"Welcome%stohere!
",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
charrecvBuf[50];
recv(sockConn,recvBuf,50,0);
printf("%sn",recvBuf);
closesocket(sockConn);
}
}
Tcp客户端——向服务器发送“hello”字符串
#pragmacomment(lib,"wsock32.lib")
#include
#include
voidmain()
{
WORDwVersionRequested;
WSADATAwsaData;
interr;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!
=0){
return;
}
if(LOBYTE(wsaData.wVersion)!
=1||
HIBYTE(wsaData.wVersion)!
=1){
WSACleanup();
return;
}
SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 实验 指导书