实验2Socket通信编程_第1页
实验2Socket通信编程_第2页
实验2Socket通信编程_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、网络与通信课程实验报告实验2:Socket通信编程姓名院系计算机学院学号任课教师钱权指导教师钱权实验地点计算机楼706机房实验时间2016年9月13日实验课表现出勤、表现得分(10)实验报告得分(40)实验总分操作结果得分(50)实验目的:1. 掌握Socket编程过程;2. 编写简单的网络应用程序。实验内容:利用您选择的任何一个编程语言,分别基于TCP与UDP编写一个简单的 Client/Server网络应用程序。具体程序要求参见实验指导书。要求以附件形式给出:系统概述:运行环境、编译、使用方法、实现环境、程序文件列表等;主要数据结构;主要算法描述;用户使用手册; 程序源代码;实验要求:(学

2、生对预习要求的回答)(10分)得分:Socket编程客户端的主要步骤1)搜寻就是否有服务端,无论就是否收到都返回相关的一个消息。2)获得服务器端的10流3)用处理流封装后与客户端交互,原则4)关闭 10 流,socket。Socket编程服务器端的主要步骤1)打开服务器端,等待客户端的连接2)如果连接成功返回一个消息,不成功则返回失败的消息3)获得服务器端的IO流4)用处理流封装后与客户端交互,5)关闭客户端,关闭服务器。实验过程中遇到的问题如何解决的?(10分)得分:问题1:怎样制作界面?因为我使用的就是java语言,所以我采用了 java的GUI程序里面的JFrame来构造窗体 界面 与控

3、件。问题2:服务器端程序如何根据收到的信息选择转发的目的地?答:服务器在收到信息后,根据特殊字符的前面加上目的地用户名用特殊字符将信息实体分 开,获得目的地用户名。 然后在记录所有用户信息的数组中,匹配该用户名,找到返回该用户的套接字指针,服务器根据该指针转发信息,若找不到,出现错误,返回错误标识。问题3:整个Socket编程中遇到的许多异常怎么处理?实验中碰到了很多异常,就是与Socket资源释放有关的,比如说我给的一个客户端线程,但改客户端关闭掉了,而我并没有在容器中进行remove该线程操作,那么由于该客户端线程继续在工作,所以会报 java、net、SocketException 错误

4、 server 无法 msg = in、readUTF();无法读取到输入流的信息。解决方法其实也就就是将该关闭的线程做remove操作。我可以加一个判断客户端线程就是否已死的线程,如果死了,就remove掉。本次实验的体会(结论)(10分)得分:本次实验感觉较难,但就是真正上手后觉得一旦做出一些东西,就有动力去继续往下做由于最近比较青睐java的原因,所以选择了 java来编写这个程序,在充分的学习后终于让客户 端与服务端能够通信,但就是想做出一个界面,所以又自学了 JFrame方面的内容,搞出来一个 界面。思考题:(10分)思考题1:(4分)|得分:您所用的编程语言在Socket通信中用到

5、的主要类及其主要作用。1、DatalnputStream;:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。DataOutputStream;:数据输出流允许应用程序以适当方式将基本Java数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入2、 socket类:用于服务器端程序与客户端程序,实现双方的数据通信。得分:思考题2:(6分)说明TCP与UDP编程的主要差异与特点。(1) TCP(Transmission Control Protocol,传输控制协议) UDP(User Data P

6、rotocol,用户数据报协议)(2) 最主要区别-传输可靠性,TCP可靠而UDP不可靠。真正交由网路传送的 IP封包就是有 一定的体积限制的(IP封包的最大体积为 65536 bytes )。由于UDP不需要可靠传输,因此 相较于TCP来说,一大堆必需占据封包表头的 over head都可省略,从而换取更大的 payroll 空间。 这样的结果,将令到单一的IP封包在作 UDP连线时所携载的资料要比 TCP连线 多更多。这就是靠牺牲可靠性而换取得来的(3) TCP提供的就是一个连线导向 (Connection Oriented)的可靠传输,而 UDP则就是一个非 连线型(Connection

7、less)的非可靠传输。应用场合,对于某些讯息量较大、时效性大于可靠性的传输来说(比方说语音/影像),UDP的确就是个不错的选择。(5)从速度上说,UDP比TCP快,UDP不需要运用确认机制来保证资料就是否正确的被接 收、不需要重传遗失的资料、资料的接收可不必按顺序进行、也不提供回传机制来控制资料流的速度。指导教师评语日期:附件1:1、 运行环境:win7 ,win8,win 10等操作系统。2、编译:通过Eclipse编译,无任何错误警告。3、实现环境:Eclipse附件2:使用方法:1、打开服务端。2、打开客户端。3、在两个端口都可以发送消息给另一个端口。4、关闭两个端口。(如图所示)TH

8、客户黛 请输入您要发送的涓息Z 挪务器请求槌接已连接到胭务器,可以开始岌送消息雷輪德I O |回请输入您要发送的消息帕劳器已正式启动 启动时间:S£ Oct22 10:5535 CST 2016等待客户端连接容户端已经连接芨送的消息:老师你好!清输入短要岌这的消息慨势器已正式启动 启动时间:Sat Oct 22 10:5535 CST 2016 等待容户塢连接容户端已经连接发送的消息:老师你好!茗户端127.0 0/1;個.0.01丈来1肖息:同学好!附件 3: 程序文件列表 1、服务端代码 package cn 、 MyNET;import java、 io 、 *;import

9、java、 net 、*;import java、util 、 *;import java、awt 、*;import java、awt 、event 、ActionEvent;import java、awt 、event 、ActionListener;import javax、 swing 、 *;import java、awt 、*;import javax、 swing 、 *;public class Server extends JFrame/*/private static final long serialVersionUID = / 输入消息框private JTextFie

10、ld jtf = new JTextField();/ 显示框private JTextArea jta = new JTextArea();/IO 流 private DataInputStream inputFromClient; private DataOutputStream outputToClient;SuppressWarnings("unused") public static void main(String args) new Server();public Server()JPanel p = new JPanel();p 、 setLayout(ne

11、w BorderLayout(); / 设置格式布局、 WEST);设置对齐方式p、 add(new JLabel(" 请输入您要发送的消息 "), BorderLayoutp 、 add(jtf, BorderLayout 、 CENTER);jtf、 setHorizontalAlignment(JTextField、 RIGHT); /、 CENTER);setLayout(new BorderLayout(); add(p, BorderLayout 、 NORTH); add(new JScrollPane(jta), BorderLayoutsetTitle(&

12、quot; 服务端 ");setSize(500, 300);setDefaultCloseOperation(JFrame、 EXIT_ON_CLOSE);setVisible(true); / 使可视化组建可见try jta、 append(" 服务器已正式启动启动时间 :" + new Date() +'n');jta、 append(" 等待客户端连接 "+'n');/ 监听连接请求、 accept();、 getInputStream();、 getOutputStream();SuppressWarn

13、ings("resource")Socket socket = new ServerSocket(8888) /IO 流 inputFromClient = new DataInputStream(socket outputToClient = new DataOutputStream(socket/ 获取客户端的名称 与 IP、 getInetAddress();、 getHostName();、 getHostAddress();"+'n');jta、 append(" 客户端已经连接InetAddress inetAddress =

14、 socket String clientName = inetAddress String clientIP = inetAddresswhile(true)+ "发来消息 :String fromClient = inputFromClient、 readUTF();jta、 append(" 客户端 " + clientName + " " + clientIP"+fromClient); catch (IOException e) jta 、 append(" 客户端已断开连接 "+'n')

15、; private class TextFieldListener implements ActionListenerOverridepublic void actionPerformed(ActionEvent e) try outputToClient 、 writeUTF(jtf 、 getText() 、 trim() + 'n'); / 向服务器发送消息jta、 append(" 发送的消息 :" + jtf 、 getText() 、 trim() +'n');jtf、 setText("");/ 输出后清空输

16、入框 catch (IOException e1) System 、 err 、 println(e1);2、客户端代码 : package cn 、 MyNET;import java、awt 、BorderLayout;import java、awt 、Container;import java、awt 、Font;import java、awt 、event 、ActionEvent;import java、awt 、event 、ActionListener;import java、 io 、 DataInputStream;import java、 io 、 DataOutputSt

17、ream;import java、 io 、 IOException;import java、 net 、Socket;import java、text 、 SimpleDateFormat;import java、util 、 Calendar;import javax、 swing 、 JFrame;import javax、 swing 、 JLabel;import javax、 swing 、 JPanel;import javax、 swing 、 JScrollPane;import javax、 swing 、 JTextArea;import javax、 swing 、 J

18、TextField;public class Client extends JFrame /*/private static final long serialVersionUID = 24810448L; / 输入消息框private JTextField jtf = new JTextField();/ 显示区域 private JTextArea jta = new JTextArea();/IO 流 private DataOutputStream toServer; private DataInputStream fromServer;public static void main(

19、String args) new Client();public Client()JPanel p = new JPanel();p 、 setLayout(new BorderLayout(); / 设置格式布局p 、 add(new JLabel(" 请输入您要发送的消息 "), BorderLayout 、 WEST);p 、 add(jtf, BorderLayout、 CENTER);jtf 、 setHorizontalAlignment(JTextField、 RIGHT); / 设置对齐方式setLayout(new BorderLayout();add(p

20、, BorderLayout、 NORTH);add(new JScrollPane(jta), BorderLayout 、 CENTER);jtf 、 addActionListener(new TextFieldListener(); /设置侦听器接口setTitle(" 客户端 ");setSize(500, 300);setDefaultCloseOperation(JFrame、 EXIT_ON_CLOSE);setVisible(true); / 使可视化组建可见try jta 、 append(" 向服务器请求链接 "+'n');SuppressWarnings("resource")Socket socket = new Socket("localhost", 8888);fromServer = new DataInputStream(socket、 getInputStream();toServer = new DataOutputStream(socket、 getOutputStream();jta、 append(" 已连接到服务器 , 可以开始发送消息 &quo

温馨提示

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

评论

0/150

提交评论