您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 实验4 基于Socket的CS程序
淮海工学院计算机工程学院实验报告书课程名:计算机网络题目:基于Socket的C/S程序开发班级:G计101学号:221003136姓名:张庆凤评语:成绩:指导教师:批阅时间:年月日《计算机网络》实验报告-1-一.实验目的与要求理解和巩固传输层与套接字的基本知识,掌握利用套接字实现面向连接的数据传输的一般方法,深入理解客户/服务器工作模式,学会简单的客户/服务器程序的开发。二.实验内容或题目利用Java语言提供的Socket技术,建立一个C/S模式的应用,允许客户端用户输入2个整数,服务器端接收这2个整数,并计算出它们的和、差、积、商,最后送回客户端。三.实验步骤与源程序源程序:服务器:importjava.io.*;importjava.net.*;importjava.util.*;publicclassServer{publicstaticvoidmain(Stringargs[]){ServerSocketserver=null;Server_threadthread;Socketyou=null;while(true){try{server=newServerSocket(2012);}catch(IOExceptione1){System.out.println(正在监听);//ServerSocket对象不能重复创建}try{System.out.println();System.out.println(正在等待客户呼叫……);you=server.accept();System.out.println(客户的地址:+you.getInetAddress());}catch(IOExceptione){System.out.println(正在等待客户);}if(you!=null)《计算机网络》实验报告-2-{newServer_thread(you).start();}}}}classServer_threadextendsThread{Socketsocket;DataOutputStreamout=null;DataInputStreamin=null;Strings=null;booleanquesion=false;Server_thread(Sockett){socket=t;try{out=newDataOutputStream(socket.getOutputStream());in=newDataInputStream(socket.getInputStream());}catch(IOExceptione){}}publicvoidrun(){while(true){doublea[]=newdouble[2];inti=0;try{s=in.readUTF();quesion=false;System.out.println(s);StringTokenizerfenxi=newStringTokenizer(s,,);while(fenxi.hasMoreTokens()){Stringtemp=fenxi.nextToken();try{a[i]=Double.valueOf(temp).doubleValue();i++;}catch(NumberFormatExceptione){out.writeUTF(请输入数字字符);quesion=true;}}if(quesion==false){doublep0=a[0]+a[1];doublep1=a[0]-a[1];《计算机网络》实验报告-3-doublep2=a[0]/a[1];//除数不能为0doublep3=a[0]*a[1];out.writeUTF(和:+p0+差:+p1+商:+p2+积:+p3);}}catch(IOExceptione){System.out.println(客户离开);return;}}}}客户端:importjava.net.*;importjava.io.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassClient{publicstaticvoidmain(Stringargs[]){newComputerClient();}}classComputerClientextendsFrameimplementsRunnable,ActionListener{Buttonconnection,send;TextFieldinputText,showResult,inputText1;Socketsocket=null;DataInputStreamin=null;DataOutputStreamout=null;Threadthread;ComputerClient(){socket=newSocket();setLayout(newFlowLayout());Boxbox=Box.createVerticalBox();inputText1=newTextField(22);box.add(newLabel(请输入IP地址:));box.add(inputText1);//box.add(newTextField(22));《计算机网络》实验报告-4-box.add(newLabel(请输入端口号:));box.add(newTextField(22));connection=newButton(连接服务器);send=newButton(发送);send.setEnabled(false);inputText=newTextField(32);showResult=newTextField(32);box.add(connection);box.add(newLabel(输入两个数字,用逗号分隔:));box.add(inputText);box.add(send);box.add(newLabel(收到结果:));box.add(showResult);connection.addActionListener(this);send.addActionListener(this);thread=newThread(this);add(box);setBounds(10,30,400,450);setVisible(true);validate();addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});}publicvoidactionPerformed(ActionEvente){if(e.getSource()==connection){try//请求和服务器建立套接字连接{if(socket.isConnected()){}else{Stringss=inputText1.getText().toString();InetAddressaddress=InetAddress.getByName(ss);InetSocketAddresssocketAddress=newInetSocketAddress(address,2012);socket.connect(socketAddress);in=newDataInputStream(socket.getInputStream());out=newDataOutputStream(socket.getOutputStream());send.setEnabled(true);thread.start();}}catch(IOExceptionee){}}if(e.getSource()==send)《计算机网络》实验报告-5-{Strings=inputText.getText();if(s!=null){try{out.writeUTF(s);}catch(IOExceptione1){}}}}publicvoidrun(){Strings=null;while(true){try{s=in.readUTF();showResult.setText(s);}catch(IOExceptione){showResult.setText(服务器断开);break;}}}}五.结果分析与实验体会服务器:《计算机网络》实验报告-6-客户端:实验体会:通过这次实验,进一步了解了套接字一些用法,并且巩固了传输层与套接字的基本知识;以前对套接字不是很熟悉,经过这次实验,明白了套接字在网络编程中有着重要的角色,比如我们使用的聊天工具就是利用套接字来实现的。思考题:1.Java语言中,服务器端和客户端套接字对象类相同吗?如不同,有何差别?答:不相同。客户端的程序使用Socket类建立到服务器的套接字连接,而服务器使用ServerSocket对象等待接收客户的信息。《计算机网络》实验报告-7-2.程序编写完毕并编译后,先运行客户端程序,还是先运行服务器端程序?为什么?答:先运行服务器端程序。因为服务器端需要一直监听服务器端是否有请求。3.Java语言中如何使用UDP协议进行数据传输的?答:java里UDP协议传送的方式细节已经封装了到类DatagramSocket里了,只要用DatagramSocket的对象进行传输数据就可以了。
本文标题:实验4 基于Socket的CS程序
链接地址:https://www.777doc.com/doc-3858041 .html