收藏 分销(赏)

实验四-基于Socket的CS程序.doc

上传人:w****g 文档编号:3947104 上传时间:2024-07-24 格式:DOC 页数:7 大小:52.54KB 下载积分:6 金币
下载 相关 举报
实验四-基于Socket的CS程序.doc_第1页
第1页 / 共7页
实验四-基于Socket的CS程序.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
淮海工学院计算机工程学院 实验报告书 课程名:计算机网络 题 目:基于Socket的C/S程序开发 班 级: G 学 号: 姓 名: 评语: 成绩: 指导教师: 批阅时间: 年 月 日 《计算机网络》实验报告 - 6 - 一、 实验目的 理解和巩固传输层与套接字的基本知识,掌握利用套接字实现面向连接的数据传输的一般方法,深入理解客户/服务器工作模式,学会简单的客户/服务器程序的开发。 二、 实验内容 利用Java语言提供的Socket技术,建立一个C/S模式的应用,允许客户端用户输入2个整数,服务器端接收这2个整数,并计算出它们的和、差、积、商,最后送回客户端。 服务器端ServerSocket类(。ServerSocket ) 构造方法:public ServerSocket(int port) throws IOException-—S_1 接受连接请求:public Socket accept() throws IOException-—S_2 客户端Socket类(java。net。Socket) 构造方法:public Socket(String host, int port) throws UnknownHostException, IOException ——C_1 读取数据:public InputStream getInputStream() throws IOException-—S_5,C_3 发送数据:public OutputStream getOutputStream() throws IOException——S_3,C_4 服务器端编程 创建ServerSocket对象 ServerSocket server=new ServerSocket(8000); 监听来自客户端的请求 Socket linkSocket=server.accept(); 与客户端进行通信 利用linkSocket。getInputStream() 接收客户端数据; 对读取的数据进行加、减、乘、除计算; 利用linkSocket.getoutputStream() 向客户端发送计算结果; 监听结束时关闭服务器 server。close(); 客户端编程 建立连接 Socket client=new Socket(“ServerComputerName", 8000); 与服务器进行通信 从键盘读入两个整数; 利用client.getoutputStream() 向服务器端发送数据; 利用client.getInputStream() 接收服务器端结果; 显示从服务器端得到的结果; 释放连接 Client。close(); 要求:在一台主机上安装并运行服务器端程序,在另一台计算机上安装并运行客户端程序,测试所编写的程序能否完成规定的功能。 三、 实验步骤与源程序 源程序: 服务器: import 。*; import java。util。*; import java。io.*; import java。awt.*; import java。awt.event。*; import javax.swing.*; public class Server { public Server() { ServerSocket server=null; Server_thread thread; Socket you=null; while(true) { try { server=new ServerSocket(8755); } catch(IOException e1) { System。out.println(”正在监听");} //ServerSocket对象不能重复创建 try { System.out。println(”等待客户呼叫”); you=server.accept(); System。out.println(”已连接到客户”); System。out。println(”客户的地址:”+you.getInetAddress()); } catch (IOException e) { System。out.println("正在等待客户”); } if(you!=null) { new Server_thread(you).start();} //为每个客户启动一个专门的线程 } } public static void main(String args[]) { new Server(); } } class Server_thread extends Thread { Socket socket; DataOutputStream out=null; DataInputStream in=null; String s=null; boolean quesion=false; Server_thread(Socket t) { socket=t; try { out=new DataOutputStream(socket。getOutputStream()); in=new DataInputStream(socket.getInputStream()); } catch (IOException e){} } public void run() { while(true) { double a[]=new double[2]; int i=0; try { s=in。readUTF();//堵塞状态,除非读取到信息 quesion=false; StringTokenizer fenxi=new StringTokenizer(s,”,”); while(fenxi.hasMoreTokens() && quesion==false) { String temp=fenxi。nextToken(); try { a[i]=Double.valueOf(temp)。doubleValue();i++; } catch(NumberFormatException e) { out。writeUTF("请输入数字字符”); quesion=true; } } if(quesion==false) { double s=a[0]+a[1]; double p=a[0]—a[1]; double q=a[0]*a[1]; double r=a[0]/a[1]; out。writeUTF(” ”+a[0]+"+”+a[1]+"="+s); out.writeUTF(" ”+a[0]+”—”+a[1]+”=”+p); out.writeUTF(" ”+a[0]+"*”+a[1]+”=”+q); out。writeUTF(" "+a[0]+”/”+a[1]+"=”+r); System。out。println("客服端数据:"+a[0]+”和"+a[1]); System。out.println(”完成客户端运算”); } } catch (IOException e) { System。out。println("客户离开”); return; } } } } 客户端: import 。*; import java。io.*; import java。awt。*; import java。awt。event。*; import javax。swing。*; public class Client extends Frame implements Runnable,ActionListener { DataInputStream in = null; DataOutputStream out = null; Panel p; Label lab1,lab2,lab3; TextField tf1,tf2,tf3; Button connection,send; Socket socket = null; Thread thread; TextArea text; public Client() { super("客户端:”); setLayout(new FlowLayout()); setSize(300,250); //设置窗口大小 setLocation(200,200);//设置窗口显示位置 setResizable(false); p=new Panel(); p。setLayout(null); p。setBounds(0,0,300,250); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System。exit(0); } }); text = new TextArea(); lab1=new Label(”输入IP地址:”); lab1。setBounds(5,5,60,25); lab2=new Label(”第一个数字:”); lab2。setBounds(5,35,60,25); lab3=new Label(”第二个数字:”); lab3。setBounds(5,65,60,25); tf1=new TextField(10); tf1。setBounds(80,5,100,25); tf2=new TextField(10); tf2。setBounds(80,35,100,25); tf3=new TextField(10); tf3.setBounds(80,65,100,25); connection=new Button("连接服务器"); connection.setBounds(200,5,90,25); connection。addActionListener(this); send=new Button(”发送数据”); send。setBounds(200,65,90,25); send。addActionListener(this); text=new TextArea(200,50); text.setBounds(5,100,290,110); p。add(lab1); p.add(lab2); p.add(lab3); p.add(tf1); p。add(tf2); p。add(tf3); p。add(connection); p。add(send); p.add(text); add(p); setVisible(true); socket=new Socket(); thread = new Thread(this); } public void actionPerformed(ActionEvent e) { if(e。getSource()==connection) { InetAddress address=null; InetSocketAddress socketAddress=null; try //请求和服务器建立套接字连接: { if(socket.isConnected()) {} else { address=InetAddress.getByName(tf1.getText()); socketAddress=new InetSocketAddress(address,8755); socket。connect(socketAddress,2000);//*等待2秒中 in =new DataInputStream(socket。getInputStream()); out = new DataOutputStream(socket.getOutputStream()); send.setEnabled(true); JOptionPane.showMessageDialog(this,"连接成功!”, ”成功!”,JOptionPane。INFORMATION_MESSAGE); thread.start(); } } catch(IOException ex) { System.out。println("time out”+ex); System.out。println(socketAddress.getHostName()+”:”+socketAddress.getPort());JOptionPane.showMessageDialog(this,”连接超时!”,”错误!",JOptionPane。ERROR_MESSAGE); new Client(); dispose(); } } if(e。getSource()==send) { String s=tf2。getText()+","+tf3。getText(); if(s!=null) { try { out。writeUTF(s); } catch(IOException e1){} } } } public void run() { String s=null; while(true) { try { s=in。readUTF(); text。append(s+"\n"); } catch(IOException e) { text.append(”与服务器已断开"); break; } } } public static void main(String args[]) { new Client(); } } 四、 测试数据与实验结果 服务器: 客户端: 五、 结果分析与实验体会 通过这次实验,进一步了解了套接字一些用法,并且巩固了传输层与套接字的基本知识;以前对套接字不是很熟悉,经过这次实验,明白了套接字在网络编程中有着重要的角色,比如我们使用的聊天工具就是利用套接字来实现的. 六、思考题 六、 Java语言中,服务器端和客户端套接字对象类相同吗?如不同,有何差别? 答:不相同.客户端的程序使用Socket类建立到服务器的套接字连接,而服务器使用ServerSocket对象等待接收客户的信息。 七、 程序编写完毕并编译后,先运行客户端程序,还是先运行服务器端程序?为什么? 答:先运行服务器端程序.因为服务器端需要一直监听服务器端是否有请求。 八、 Java语言中如何使用UDP协议进行数据传输的? 答:java里UDP协议传送的方式细节已经封装了到类DatagramSocket里了,只要用DatagramSocket的对象进行传输数据就可以了。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服