淮海工学院计算机工程学院实验报告书课程名:《计算机网络》题目:基于socket的C/S应用程序设计班级:软件132学号:201312291姓名:张波评语:成绩:指导教师:批阅时间:2014年12月11日《计算机网络》实验报告-1-一、实验目的通过本次实验,理解和巩固传输层与套接字的基本知识,学习Java等语言工具提供的socket软件包,掌握利用套接字实现实现面向连接的数据传输的一般方法,深入理解客户/服务器工作模式。二、实验内容利用Java语言提供的Socket技术,建立一个C/S模式的应用,允许客户端用户输入2个整数,服务器端接收这2个整数,并计算出它们的和、差、积、商,最后送回客户端。三、实验步骤与源程序ServerSocketserveForClient=newServerSocket(2015)port与客户呼叫的端口号一致accept()accept()将客户端的套接字和服务器端的套接字连接起来.Socketsc=serveForClient.accept()接收客户套接字连接。sc驻留服务器端getOutputStream()服务器端输出流指向客户端的输入流;getInputStream()服务器端获得输入流指向客户端Socket对象的输出流。服务器端编程创建ServerSocket对象ServerSocketserver=newServerSocket(8000);监听来自客户端的请求SocketlinkSocket=server.accept();与客户端进行通信利用linkSocket.getInputStream()接收客户端数据;对读取的数据进行加、减、乘、除计算;利用linkSocket.getoutputStream()向客户端发送计算结果;监听结束时关闭服务器server.close();客户端编程建立连接Socketclient=newSocket(“ServerComputerName”,8000);《计算机网络》实验报告-2-与服务器进行通信从键盘读入两个整数;利用client.getoutputStream()向服务器端发送数据;利用client.getInputStream()接收服务器端结果;释放连接Client.close();Readimportjava.io.*;publicclassReadimplementsRunnable{DataInputStreamin;publicvoidsetDataInputStream(DataInputStreamin){this.in=in;}publicvoidrun(){doubleresult1=0;doubleresult2=0;doubleresult3=0;doubleresult4=0;while(true){try{result1=in.readDouble();result2=in.readDouble();result3=in.readDouble();result4=in.readDouble();System.out.println(相加得+result1);System.out.println(相减得+result2);System.out.println(相乘得+result3);System.out.println(相除得+result4);System.out.println(输入两个数);}catch(IOExceptione)《计算机网络》实验报告-3-{System.out.println(与服务器断开+e);break;}}}}Clientimportjava.io.*;importjava.net.*;importjava.util.*;publicclassClient{publicstaticvoidmain(Stringargu[]){Scannerscanner=newScanner(System.in);Socketmysocket=null;DataInputStreamin=null;DataOutputStreamout=null;ThreadreadData;Readread=null;try{mysocket=newSocket();read=newRead();readData=newThread(read);System.out.print(输入服务器的IP:);StringIP=scanner.nextLine();System.out.print(输入端口号:);intport=scanner.nextInt();if(mysocket.isConnected()){}else{《计算机网络》实验报告-4-InetAddressaddress=InetAddress.getByName(IP);InetSocketAddresssocketAddress=newInetSocketAddress(address,port);mysocket.connect(socketAddress);in=newDataInputStream(mysocket.getInputStream());out=newDataOutputStream(mysocket.getOutputStream());read.setDataInputStream(in);readData.start();}}catch(Exceptione){System.out.println(服务器断开+e);}System.out.print(输入两个数);while(scanner.hasNext()){doubleradius=0;try{radius=scanner.nextDouble();}catch(InputMismatchExceptionexp){System.exit(0);}try{out.writeDouble(radius);}catch(Exceptione){}}}}《计算机网络》实验报告-5-Serverimportjava.io.*;importjava.net.*;importjava.util.*;publicclassServer{publicstaticvoidmain(Stringargu[]){ServerSocketserver=null;ServerThreadthread;Socketyou=null;while(true){try{server=newServerSocket(2015);}catch(IOExceptione1){System.out.println(正在监听);}try{System.out.println(等待客户呼叫);you=server.accept();System.out.print(客户的地址:+you.getInetAddress());}catch(IOExceptione){System.out.println(正在等待客户);}if(you!=null){newServerThread(you).start();}}《计算机网络》实验报告-6-}}classServerThreadextendsThread{Socketsocket;DataOutputStreamout=null;DataInputStreamin=null;Strings=null;ServerThread(Sockett){socket=t;try{out=newDataOutputStream(socket.getOutputStream());in=newDataInputStream(socket.getInputStream());}catch(IOExceptione){}}publicvoidrun(){while(true){try{doubler1=in.readDouble();doubler2=in.readDouble();doublejia=r1+r2;doublejian=r1-r2;doublecheng=r1*r2;doublechu=r1/r2;out.writeDouble(jia);out.writeDouble(jian);out.writeDouble(cheng);out.writeDouble(chu);《计算机网络》实验报告-7-}catch(IOExceptione){System.out.println(客户离开:);return;}}}}四、测试数据与实验结果(可以抓图粘贴)《计算机网络》实验报告-8-五、结果分析与实验体会通过这次实验,进一步了解了套接字一些用法,并且巩固了传输层与套接字的基本知识;以前对套接字不是很熟悉,了解了socket的工作层次。知道了服务端和客户端是如何实现面向连接的数据传输。六、思考题1、Java语言中,服务器端和客户端套接字对象类相同吗?如不同,有何差别?不相同。客户端的程序使用Socket类建立到服务器的套接字连接,而服务ServerSocket对象等待接收客户的信息。2、C/S程序编写完毕并编译后,先运行客户端程序,还是先运行服务器端程序?为什么?先运行服务器端程序。因为服务器端需要一直监听服务器端是否有请求。3、Java语言中如何使用UDP协议进行数据传输的?java里UDP协议传送的方式细节已经封装了到类DatagramSocket里了,只要用DatagramSocket的对象进行传输数据就可以了。