计算机网络上机三_第1页
计算机网络上机三_第2页
计算机网络上机三_第3页
计算机网络上机三_第4页
计算机网络上机三_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、沈 阳 工 程 学 院学 生 实 验 报 告(课程名称:计算机网络原理)实验题目: 传输层协议的简单应用 班 级 网络本121 学 号 2012418129 姓 名 王翃 地 点 F606 指导教师 费雅洁、杨盛、宋敏 实 验 日 期 : 2014 年 5月 16日一、实验目的 掌握套接字编程方法。二、实验环境 Java环境三、实验内容与要求任务1:编写程序实现但客户聊天室。步骤1.阅读下面的关于TCP编程的Java知识TCP通信使用Scoket套接字实现。套接字代表计算机之间网络连接的对象,它提供了很多方法实现计算机之间的网络通信。下面介绍使用Scoket套接字实现网络通信的步骤。 创建服务

2、器端套接字服务器端套接字是ServerSocket类的实例对象,用于实现服务器程序,ServerSocket类监视指定的端口,并建立客户端到服务器端套接字的连接,也就是负责客户端的呼叫任务。ServerSocket类有很多常用构造方法,下面只介绍一种。注意,服务器端所有的构造方法均需要处理IOExceptipon异常。例如:tryServerSocket ss=new ServerSocket(1880);/监听端口号为1880的端口,ss为服务器端套接字的对象catch(IOException e)/在此编写脚本处理输入输出异常 创建客户端套接字客户端端套接字是Socket类的实例对象,用于

3、实现客户端程序。Socket类常用构造方法很多,下面只介绍一种。同样,客户端所有的构造方法均需要处理IOExceptipon异常。trySocket mysocket=new Socket("8",1880);/建立于IP地址为8,端口号为1880的服务器的连接catch(IOException e)/在此编写脚本处理输入输出异常 当客户端套接字连接建立后,一条服务器与客户端的通信线路就建立起来了。 服务器端接受客户端请求在服务器端利用其accept()方法接收客户端的套接字连接请求。例如,上面创建的服务器端套接字ss

4、接受客户端请求,代码如下:trymysocket =ss.accept();/ss为上面创建的服务器套接字对象,accept()接收catch(IOException e)/在此编写脚本处理输入输出异常 客户端发送和接收服务器Socket类提供了getInputStream ()方法和getOutStream()方法来接收和发送数据。这两个方法分别返回InputStream和OutputSteam类对象。为了便于读/写数据,可以在返回的输入/输出流对象上建立过滤流,如DataInputStream、DataOutputStream或PrintStream类对象,对于文本方式流对象,可以采用In

5、putStreamReader和OutputStreamWriter、PrintWirter等处理。步骤2:配置Java程序运行环境变量在桌面“我的电脑”图标上单击右键,选择“属性”菜单,将出现系统特性设置窗口,如图 1所示。图1 系统特性设置窗口在“高级”选项卡中单击“环境变量”按钮。将出现“环境变量”设置窗口,如图 2所示。图2 “环境变量”设置窗口在“系统变量”列表框中选择“Path”,然后单击“编辑”按钮,在出现的“编辑系统变量”对话框中,在“变量值”栏的命令最前面添加“C:Program FilesJavajdk1.6.0_18bin;”命令,如图3所示。图3 “编辑系统变量”Pat

6、h对话框用同样方法设置环境变量“classpath”,其值为“.; C:Program FilesJavajdk1.6.0_18jrelibrt.jar;”命令,由于一般系统安装时没有classpath这个环境变量,所以要新建该环境变量,如图4所示。图4 “新建系统变量”Classpath对话框设置完成后,单击“开始”/“所有程序”/“附件”/“命令提示符”打开DOS窗口,在命令提示符下输入“java”或“javac”,回车后,如果出现其用法参数提示信息,则表明安装配置成功,如图5所示。图5 MS-DOS中javac命令执行结果 测试自己的实验环境,如果输出结果不正确,则配置Java环境变量,

7、且将配置过程写入实验报告。步骤 3. 编写、编译和运行程序将程序代码、编译和运行命令写入实验报告,且写出屏幕显示信息的执行过程。步骤4.试着修改端口号。试着修改程序中客户与服务器连接的端口号,重新编译和运行程序,观察程序运行结果,分析端口号的作用,写入实验报告。步骤5.试着修改端口号。两个同学一组,一个为服务端,一个为客户端,试着修改程序中客户与服务器的连接,重新编译和运行程序,观察程序运行结果,分析端口号的作用,写入实验报告。客户端import java.io.*;import .*;public class WLB12129 /学生类(客户端) public static void mai

8、n(String args) try Socket socket=new Socket("9",4700); /向本机的4700端口发出客户请求 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); /由系统标准输入设备构造BufferedReader对象 PrintWriter os=new PrintWriter(socket.getOutputStream(); /由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader

9、 is=new BufferedReader(new InputStreamReader(socket.getInputStream(); /由Socket对象得到输入流,并构造相应的BufferedReader对象 String readline; readline=sin.readLine(); /从系统标准输入读入一字符串 while(!readline.equals("bye") /若从标准输入读入的字符串为 "bye"则停止循环 os.println(readline); /将从系统标准输入读入的字符串输出到Server os.flush();

10、 /刷新输出流,使Server马上收到该字符串 System.out.println("学生:"+readline); /在系统标准输出上打印读入的字符串 System.out.println("老师:"+is.readLine(); /从Server读入一字符串,并打印到标准输出上 readline=sin.readLine(); /从系统标准输入读入一字符串 /继续循环 os.close(); /关闭Socket输出流 is.close(); /关闭Socket输入流 socket.close(); /关闭Socket catch(Exception

11、 e) System.out.println("Error"+e); /出错,则打印出错信息 服务器端import java.io.*;import .*;public class WLB12118 /服务器端 public static void main(String args) try ServerSocket server=null; try server=new ServerSocket(4700); /创建一个ServerSocket在端口4700监听客户请求 catch(Exception e) System.out.println("can not

12、 listen to:"+e); /出错,打印出错信息 Socket socket=null; try socket=server.accept(); /使用accept()阻塞等待客户请求,有客户 /请求到来则产生一个Socket对象,并继续执行 catch(Exception e) System.out.println("Error."+e); /出错,打印出错信息 String line; BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream(); /

13、由Socket对象得到输入流,并构造相应的BufferedReader对象 PrintWriter os=new PrintWriter(socket.getOutputStream(); /由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); /由系统标准输入设备构造BufferedReader对象 System.out.println("学生:"+is.readLine(); /在标准输出上打印从客户端读入的字符串 l

14、ine=sin.readLine(); /从标准输入读入一字符串 while(!line.equals("bye") /如果该字符串为 "bye",则停止循环 os.println(line); /向客户端输出该字符串 os.flush(); /刷新输出流,使Client马上收到该字符串 System.out.println("老师:"+line); /在系统标准输出上打印读入的字符串 System.out.println("学生:"+is.readLine(); /从Client读入一字符串,并打印到标准输出上

15、line=sin.readLine(); /从系统标准输入读入一字符串 /继续循环 os.close(); /关闭Socket输出流 is.close(); /关闭Socket输入流 socket.close(); /关闭Socket server.close(); /关闭ServerSocket catch(Exception e) System.out.println("Error:"+e); /出错,打印出错信息 运行结果如下: 服务器端 客户端任务2:扩展任务,修改程序实现多客户聊天室提示:使用Java语言多线程技术。参考资料:(鉴于有的学生没有学过Java编程,所

16、以老师给出例子代码,供学生参考)例1:一个简单的聊天室import java.io.*;import .*;public class WLB12129 /学生类(客户端) public static void main(String args) try Socket socket=new Socket("9",4700); /向本机的4700端口发出客户请求 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); /由系统标准输入设备构造BufferedReade

17、r对象 PrintWriter os=new PrintWriter(socket.getOutputStream(); /由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream(); /由Socket对象得到输入流,并构造相应的BufferedReader对象 String readline; readline=sin.readLine(); /从系统标准输入读入一字符串 while(!readline.equals(&qu

18、ot;bye") /若从标准输入读入的字符串为 "bye"则停止循环 os.println(readline); /将从系统标准输入读入的字符串输出到Server os.flush(); /刷新输出流,使Server马上收到该字符串 System.out.println("学生:"+readline); /在系统标准输出上打印读入的字符串 System.out.println("老师:"+is.readLine(); /从Server读入一字符串,并打印到标准输出上 readline=sin.readLine(); /从系统

19、标准输入读入一字符串 /继续循环 os.close(); /关闭Socket输出流 is.close(); /关闭Socket输入流 socket.close(); /关闭Socket catch(Exception e) System.out.println("Error"+e); /出错,则打印出错信息 服务器端import java.io.*;import .*;public class WLB12118 /服务器端 public static void main(String args) try ServerSocket server=null; try serve

20、r=new ServerSocket(4700); /创建一个ServerSocket在端口4700监听客户请求 catch(Exception e) System.out.println("can not listen to:"+e); /出错,打印出错信息 Socket socket=null; try socket=server.accept(); /使用accept()阻塞等待客户请求,有客户 /请求到来则产生一个Socket对象,并继续执行 catch(Exception e) System.out.println("Error."+e); /

21、出错,打印出错信息 String line; BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream(); /由Socket对象得到输入流,并构造相应的BufferedReader对象 PrintWriter os=new PrintWriter(socket.getOutputStream(); /由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader sin=new BufferedReader(new InputStreamReader(Syst

22、em.in); /由系统标准输入设备构造BufferedReader对象 System.out.println("学生:"+is.readLine(); /在标准输出上打印从客户端读入的字符串 line=sin.readLine(); /从标准输入读入一字符串 while(!line.equals("bye") /如果该字符串为 "bye",则停止循环 os.println(line); /向客户端输出该字符串 os.flush(); /刷新输出流,使Client马上收到该字符串 System.out.println("老师

23、:"+line); /在系统标准输出上打印读入的字符串 System.out.println("学生:"+is.readLine(); /从Client读入一字符串,并打印到标准输出上 line=sin.readLine(); /从系统标准输入读入一字符串 /继续循环 os.close(); /关闭Socket输出流 is.close(); /关闭Socket输入流 socket.close(); /关闭Socket server.close(); /关闭ServerSocket catch(Exception e) System.out.println(&quo

24、t;Error:"+e); /出错,打印出错信息 运行结果如下:服务器端客户端例2:多客户聊天室。客户端端程序:import .*; import java.io.*; public class Student1 public static void main(String args)throws Exception Socket server=new Socket("localhost",4700); /向本机的4700端口发出客户请求 BufferedReader in=new BufferedReader(new InputStreamReader(serv

25、er.getInputStream(); /由Socket对象得到输入流,并构造相应的BufferedReader对象 PrintWriter out=new PrintWriter(server.getOutputStream(); /由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader br=new BufferedReader(new InputStreamReader(System.in); /由系统标准输入设备构造BufferedReader对象 while(true) String str=br.readLine(); /从系统标准输入读入一

26、字符串 out.println(str); /将从系统标准输入读入的字符串输出到Server out.flush(); /刷新输出流,使Server马上收到该字符串 if(str.equals("bye") /若从标准输入读入的字符串为 "bye"则停止循环 break; System.out.println(in.readLine(); /从Server读入一字符串,并打印到标准输出上 server.close(); /关闭Socket 服务器端程序:import .*; import java.io.*;public class Teacher extends Thread /多线程 private Socket socket ; public Teacher(Socket socket) this.socket = socket; public void run() /线程主体 try BufferedReader in=new BufferedReader(new InputStreamReader(socket.ge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论