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

下载本文档

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

文档简介

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

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

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

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

5、的主要类及其主要作用。1、datainputstream;:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。dataoutputstream;:数据输出流允许应用程序以适当方式将基本 java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入2、socket 类:用于服务器端程序和客户端程序,实现双方的数据通信。思考题2:(6分)得分:说明tcp和udp编程的主要差异和特点。(1)tcp(transmission control protocol,传输控制协议)udp(user data

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

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

8、.关闭两个端口。(如图所示)附件3:程序文件列表:1.服务端代码:package cn.mynet;import java.io.*;import .*;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 stati

9、c final long serialversionuid = 4377172896920510045l;/输入消息框 private jtextfield jtf = new jtextfield(); /显示框 private jtextarea jta = new jtextarea(); /io流 private datainputstream inputfromclient; private dataoutputstream outputtoclient; suppresswarnings(unused) public static void main(string args) ne

10、w server(); public server() 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, borderlayout.north); add(new jscr

11、ollpane(jta), borderlayout.center); jtf.addactionlistener(new textfieldlistener(); /设置侦听器接口 settitle(服务端); setsize(500, 300); setdefaultcloseoperation(jframe.exit_on_close); setvisible(true); /使可视化组建可见 try jta.append(服务器已正式启动 启动时间: + new date() +n); jta.append(等待客户端连接+n); /监听连接请求 suppresswarnings(re

12、source)socket socket = new serversocket(8888).accept(); /io流 inputfromclient = new datainputstream(socket.getinputstream(); outputtoclient = new dataoutputstream(socket.getoutputstream(); /获取客户端的名称 和 ip inetaddress inetaddress = socket.getinetaddress(); string clientname = inetaddress.gethostname();

13、 string clientip = inetaddress.gethostaddress(); jta.append(客户端已经连接+n); while(true) string fromclient = inputfromclient.readutf(); jta.append(客户端 + clientname + ; + clientip + 发来消息: +fromclient); catch (ioexception e) jta.append(客户端已断开连接+n); private class textfieldlistener implements actionlistener

14、override public void actionperformed(actionevent e) try outputtoclient.writeutf(jtf.gettext().trim() + n); /向服务器发送消息 jta.append(发送的消息: + jtf.gettext().trim() +n); jtf.settext(); /输出后清空输入框 catch (ioexception e1) system.err.println(e1); 2.客户端代码:package cn.mynet;import java.awt.borderlayout;import java

15、.awt.container;import java.awt.font;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.io.datainputstream;import java.io.dataoutputstream;import java.io.ioexception;import .socket;import java.text.simpledateformat;import java.util.calendar;import javax.swing.jframe;im

16、port javax.swing.jlabel;import javax.swing.jpanel;import javax.swing.jscrollpane;import javax.swing.jtextarea;import javax.swing.jtextfield;public class client extends jframe /* * */private static final long serialversionuid = 2480850195147310448l;/输入消息框 private jtextfield jtf = new jtextfield(); /显

17、示区域 private jtextarea jta = new jtextarea(); /io流 private dataoutputstream toserver; private 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

18、); p.add(jtf, borderlayout.center); jtf.sethorizontalalignment(jtextfield.right); /设置对齐方式 setlayout(new borderlayout(); add(p, 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.

温馨提示

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

评论

0/150

提交评论