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

下载本文档

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

文档简介

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

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

3、根据收到的信息选择转发的目的地?答:效劳器在收到信息后,根据特殊字符的前面加上目的地用户名用特殊字符将信息实体分开,获得目的地用户名。然后在记录所有用户信息的数组中,匹配该用户名,找到返回该用户的套接字指针,效劳器根据该指针转发信息,假设找不到,出现错误,返回错误标识。问题3:整个 Socket 编程中遇到的许多异常怎么处理?实验中碰到了很多异常,是与 Socket 资源释放有关的,比方说我给的一个客户端线程,但改客户端关闭掉了,而我并没有在容器中进展 remove 该线程操作,则由于该客户端线程继续在工作,所以会报.SocketE*ception 错误,server 无法msg = in.r

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

5、输入流允许应用程序以与机器无关方式从底层输入流中读取根本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。DataOutputStream;:数据输出流允许应用程序以适当方式将根本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入2、socket 类:用于效劳器端程序和客户端程序,实现双方的数据通信。思考题2:6分得分:说明TCP和UDP编程的主要差异和特点。1TCPTransmission Control Protocol,传输控制协议)UDPUser Data Protocol,用户数据报协议2最主要区别-传输可靠性,TCP 可靠而

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

7、靠性的传输来说(比方说语音/影像), UDP 确实是个不错的选择。5从速度上说,UDP 比 TCP 快,UDP 不需要运用确认机制来保证资料是否正确的被接收、不需要重传遗失的资料、资料的接收可不必按顺序进展、也不提供回传机制来控制资料流的速度。指导教师评语:日期: 附件1:1.运行环境: win7 ,win8,win10等操作系统。2.编译:通过Eclipse编译,无任何错误警告。3.实现环境:Eclipse附件2:使用方法:1.翻开效劳端。2.翻开客户端。3.在两个端口都可以发送消息给另一个端口。4.关闭两个端口。如下图附件3:程序文件列表:1.效劳端代码:package.MyNET;imp

8、ort java.io.*;import .*;import java.util.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java*.swing.*;import java.awt.*;import java*.swing.*;public class Server e*tends JFrame /* * */private static final long serialVersionUID = 45L;/输入消息框 private JT

9、e*tField jtf = new JTe*tField(); /显示框 private JTe*tArea jta = new JTe*tArea(); /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(new B

10、orderLayout(); /设置格式布局 p.add(new JLabel(请输入您要发送的消息), BorderLayout.WEST); p.add(jtf, BorderLayout.CENTER); jtf.setHorizontalAlignment(JTe*tField.RIGHT); /设置对齐方式 setLayout(new BorderLayout(); add(p, BorderLayout.NORTH); add(new JScrollPane(jta), BorderLayout.CENTER); jtf.addActionListener(new Te*tFiel

11、dListener(); /设置侦听器接口 setTitle(效劳端); setSize(500, 300); setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE); setVisible(true); /使可视化组建可见 try jta.append(效劳器已正式启动 启动时间: + new Date() +n); jta.append(等待客户端连接+n); /监听连接请求 SuppressWarnings(resource)Socket socket = new ServerSocket(8888).accept(); /IO流 inputFrom

12、Client = new DataInputStream(socket.getInputStream(); outputToClient = new DataOutputStream(socket.getOutputStream(); /获取客户端的名称 和 IP InetAddress inetAddress = socket.getInetAddress(); String clientName = inetAddress.getHostName(); String clientIP = inetAddress.getHostAddress(); jta.append(客户端已经连接+n)

13、; while(true) String fromClient = inputFromClient.readUTF(); jta.append(客户端 + clientName + ; + clientIP + 发来消息: +fromClient); catch (IOE*ception e) jta.append(客户端已断开连接+n); private class Te*tFieldListener implements ActionListener Override public void actionPerformed(ActionEvent e) try outputToClient

14、.writeUTF(jtf.getTe*t().trim() + n); /向效劳器发送消息 jta.append(发送的消息: + jtf.getTe*t().trim() +n); jtf.setTe*t(); /输出后清空输入框 catch (IOE*ception e1) System.err.println(e1); 2.客户端代码:package.MyNET;import java.awt.BorderLayout;import java.awt.Container;import java.awt.Font;import java.awt.event.ActionEvent;imp

15、ort java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOE*ception;import .Socket;import java.te*t.SimpleDateFormat;import java.util.Calendar;import java*.swing.JFrame;import java*.swing.JLabel;import java*.swing.JPanel;import java*.swing.JScr

16、ollPane;import java*.swing.JTe*tArea;import java*.swing.JTe*tField;public class Client e*tends JFrame /* * */private static final long serialVersionUID = 48L;/输入消息框 private JTe*tField jtf = new JTe*tField(); /显示区域 private JTe*tArea jta = new JTe*tArea(); /IO流 private DataOutputStream toServer; priva

17、te DataInputStream fromServer; public static void main(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(JTe*tField.RIGHT); /设置对齐方式

18、setLayout(new BorderLayout(); add(p, BorderLayout.NORTH); add(new JScrollPane(jta), BorderLayout.CENTER); jtf.addActionListener(new Te*tFieldListener(); /设置侦听器接口 setTitle(客户端); setSize(500, 300); setDefaultCloseOperation(JFrame.E*IT_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.ge

温馨提示

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

评论

0/150

提交评论