`
云初静
  • 浏览: 29165 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

哦,总结 !( 通信阶段前期总结)

 
阅读更多
    看了下上一次写的的总结,还是11年10月份的……
一直都不太喜欢写,或者说,总是以一副淡定,慵懒静默的姿态在学着。每次有所感悟心得,想写一篇的时候,也还是过后就觉得没必须的。其实没什么让自己的生活忙成了这样,国家总统都还有工作和生活。现在感知这不是一个很好的习惯,下决心尽量去改善。\(^o^)/~
    下面是对这7天以来,对通信阶段所学知识的一个小总结:

一、完成的任务:

(1)实现服务器和客户端的互联:当有一个客户端连接进来的时候,服务器端启用一个线程来处理客户端发送过来的请求。
抽象出来,要做的有:
1.创建服务器对象,分配好实现连接时的端口号
2.在服务器端建立连接,返回连接套接S
3.在客户端建立连接,要指明所要连接的服务器的IP地址和端口号port

服务器端:


	public void setServer(int port) {
		try {
			// 创建一个服务器对象,如果端口号超出范围或者已经被占用,则抛出异常
			java.net.ServerSocket so = new java.net.ServerSocket(port);
			// 让服务器进入循环等待状态
			while (true) {// 等待客户机连接,连接后生成一个Socket对象,如果没有客户机连接进来则程序在此阻塞
				java.net.Socket client = so.accept();
				// 创建线程对象,并启动线程
				ServerThread st = new ServerThread(client, jta);
				st.start();
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		}

	}


客户端:

// 创建客户端
	public java.net.Socket setClients(java.net.InetAddress ip, int port) {
		// 创建客户端,并将其连接到指定 IP 地址的指定端口号。(指定的端口号必须与服务器随即分配的端口号一致)
		try {
			s = new java.net.Socket(ip, port);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return s;
	}


(2)服务器和客户端的对讲:在客户端和服务器端分别创建一个显示界面,界面上包含一个多行文本区域(java.awt.TextArea  jta)和一个单行文本显示区域(javax.swing.JTextField  jtf)还有一个发送按钮(javax.swing.JButton  jb)组件。
    实现当客户端在在单行文本区域(jta)输入发送消息,点击发送按钮(jb)过后,服务器接收到消息并显示在多行文本区域(jtf)中;同理,服务器在单行文本区域输入发送消息,点击发送按钮过后,客户端接收到消息并显示在多行文本区域中。
    实现方法也很简单,上面已经讲过服务器和客户端的互联了,实现互联后,我们可以通过得到连接套接S的输入输出流来进行读取和写出数据。

    得到S的输入输出流:


	// 创建输入流
			InputStream ins = s.getInputStream();
			// 创建输出流
			OutputStream ins = s.getOutputStream();


    然后要做的就是在在发送按钮上添加一个动作监听器(java.awt.event.ActionListener),当点击按钮时候,调用write()方法用得到的输出流写出输入框(jtf)的信息,并清空输入框:

// 信息写入 :信息发送出去,输入框清空
	public void write() {
		try {
			// 得到输出流
			OutputStream ous = s.getOutputStream();
			//创建数据输出流对象
			DataOutputStream dos = new DataOutputStream(ous);
			// 获得输入框信息,将输入框的信息按字节顺序写出到输出流中。
			dos.writeBytes(jtf.getText());
			ous.flush();
			// 清空输入框
			jtf.setText("");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}



    与此同时在另一端建立一个线程,不停读取数据(如果写出信息的一端是客户端,就在服务器端进行读取):

public void read() {
		while (true) {
			try {// 不断读取数据
					// 创建输入流
				InputStream ins = s.getInputStream();
				while (ins.available() > 0) {// 当有数据可读时,读取数据到字节数组b
					int count = 0;
					// 创建一个字符串缓冲区
					StringBuffer stb = new StringBuffer();
					char c;
					while (ins.available() > 0) {
						// 读取个客户机发来的一个字节
						int i = ins.read();
						// 将输入的一个字节转化为char类型
						c = (char) i;
						// 将得到的字符加入字符串缓冲区
						stb.append(c);
					}

					// 将读入的字节转为字符串
					String str = stb.toString();
					System.out.println(str);
					count++;
					// 将读取到的数据显示到JTextArea中
					ta.append("收到来自客户端的第" + count + "条信息:" + str + "\t\n");

				}
				try {
					Thread.sleep(50);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}


(3)简单的服务器和客户端的画板交互:在客户端和服务器端分别创建一个显示界面,给界面窗体添加鼠标监听器,当点击释放鼠标后,可以实现画直线,并且在任一端画直线,另一端可以同步显示出来。
    交互画板的实现和客户机服务器的对讲原理相同,差别只在于读取数据类型的不同,交互画板需要创建一个基本数据输入输出流(DataInputStream/DataOutputStream)来输入输出一条直线的两个坐标点位置。


	// 获得套接的输入流,并创建基础数据输入流
				InputStream ins = s.getInputStream();
				DataInputStream dis = new DataInputStream(ins);// 得到套接的输出流,创建原始数据类型输出流
		OutputStream ous = s.getOutputStream();
		DataOutputStream dos = new DataOutputStream(ous);

    其实对于任何程序,理清事件发生的流程顺序了,实现就都不困难了。比如实现画板,因为读取数据是一个连续不断的过程,所以应该建立一个线程来进行读取,而每一次画了一条直线之后才需要写出数据,所以,只用在画线后调用就可以了。
(4)服务器和客户端之间的文件传输:实现在一段画直线或者椭圆,另一端同步显示出来;同时,一端通过文件选择器发送一个文件,另一端可以接受,并且保存到指定路径。我只写了从客户端发送文件,服务器接受文件。
    实现文件传输有很多种方法,我用的是最复杂的一种方法,制定协议,就是制定读取写出的格式(比如先读取类型,是画图还是传文件,再读取文件名字长度,文件名字,文件正文长度,文件正文内容…),然后严格按照格式一板一眼的写过去,然后读取进来。
    此处最混乱的是,要区分好输入输出的对象,是文件,还是客户端或者服务器,比如对于创建基本数据输入输出流就有关于输入输出到S中和输入输出到文件中的:


// 得到套接的输出流,创建原始数据类型输出流
		OutputStream ous = s.getOutputStream();
		DataOutputStream dos = new DataOutputStream(ous);
            // 创建基于文件的原始数据类型输出流
		OutputStream ous = new FileOutputStream(ServerThread.path);DataOutputStream dos = new DataOutputStream(ous);


二、在完后该阶段任务中遇到的一些错误:

(1)关于服务器客户端连接的异常分析:

1.java.net.BindException:Address already in use: JVM_Bind:该异常发生在服务器端进行new ServerSocket(port)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。即上一次的运行还没关闭,又重新点击了运行。


2.java.net.ConnectException: Connection refused: connect:该异常发生在客户端进行new Socket(ip, port)操作时,发生的原因或者是具有ip地址的机器不能找到,或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动。


3.java.net.SocketException: Socket is closed:该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。


4.java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error):该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。


5.java.net.SocketException: Broken pipe:该异常在客户端和服务器均有可能发生。在第4个异常的第一种情况中(也就是抛出SocketExcepton:Connect reset by peer:Socket write error后),如果再继续写数据则抛出该异常。这两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。


(2)空指针异常:S获得输入输出流时候的空指针异常,连接对象s的异常,一般是因为重新new了一个S所在类的对象,故而在非建立连接的类中用S时候,要记得传值过去。


(3)服务器和客户端两端画线出来位置总是不对
一个原因可能是调用的读写方法不对,比如writeByte(),然后readInt()就有可能丢失数据,第二个原因就是写出和读取时候的变量顺序要保持一致,不能这边写出x1,x2,然后那边读取x2,x1,第三个原因就是变量的个数,类型一定要对应。这些都是处理IO流重要注意的细节问题。


三、小点感想
在完成次阶段的任务时候,费了不少时间,但是,进度并不是很快,算是很慢,尤其是文件传输写了两天。

犯了很多的错误,主要还是监听传值的错误,和IO的错误。

发现了自己很多的不足,对以前所学的知识并没有掌握的很好。突然的发现自己关于流的所有知识都忘干净了,连InputStream是抽象类,不能被实例化都记不着了o(╯□╰)o   故而,总结还真是很重要,以前太懒了,看到别人每学一个内容时候,都将知识要点和所犯的错误写的清清楚楚,很惭愧。所以,下决心改了。

收获也有不少,对自己而言的最重要的是兴趣慢慢提高了,因为兴趣对自己真的很重要。其余的,没什么能阻挡住自己。并且看到了很多人的优秀和努力,更有激情和动力了。


最后,这篇总结好像写的很是混乱,看的到的人,看的懂的人看不懂的人,都可以吱下声给个意见~~没意见下次我也会写的更好。













分享到:
评论

相关推荐

    工程通信个人年终总结_

    【工程通信个人年终总结】 在过去的一年里,作为一名工程通信领域的从业者,我经历了从初入行业到逐渐熟悉业务的转变。在***公司的各个项目中,我不仅深化了对工程通信的理解,同时也意识到自身存在的问题与不足。...

    经典卫星通信系统介绍

    初期的通信卫星如INTELSAT I、II和III主要用于国际间的通信,但地球站设备庞大,需要大型天线和高功率发射机。 2. **70年代**:随着技术进步,地球站开始采用更小口径的天线,如21米、18米和10米,发射机功率减小,...

    TMT一周谈之通信:5G正式商用;通信行业三季报总结.rar

    2. 利润表现:5G投资的初期阶段可能造成一定的成本压力,但随着商用的深入,有望逐渐实现盈利。关注通信企业净利润变化,可评估其运营效率和市场竞争力。 3. 市场份额:5G市场竞争激烈,各公司在技术研发、网络部署...

    TD流量提升工作阶段总结及下阶段工作安排(11月14日).pptx

    2013年11月,在广东TD网络流量提升工作中,出现了一个阶段性的总结与展望,即《TD流量提升工作阶段总结及下阶段工作安排》。这份文件详细阐述了TD网络在广东地区的规模增长情况、流量提升背景、实施的优化措施以及对...

    通信公司集中优化项目策划总结报告

    项目分为五个主要阶段:预备阶段、测量阶段、邻区优化阶段、频率优化阶段以及后期优化及总结阶段。 #### 二、优化预备与数据采集 ##### 2.1 优化前期预备 **2.1.1 OMC负荷测试** 在优化初期,通过对OMC(操作...

    通信监理实习总结报告范文.doc

    【通信监理实习总结报告】 尊敬的领导, 在通信监理实习的过程中,我深入理解了通信监理在项目中的核心职责,从理论到实践,我逐步积累了丰富的经验。以下是我实习期间的主要学习内容: 首先,通过广州总部的培训...

    通信行业2019年年报和2020Q1季报总结:通信行业增长放缓,5G有望开启新周期.zip

    2. 5G应用落地:随着5G技术的成熟,各行各业将逐步探索和实现5G应用场景,如智能制造、智慧城市、智慧医疗等,这将推动通信行业进入新的增长阶段。 3. 持续的市场竞争:尽管5G带来机遇,但同时也加剧了行业竞争,...

    通信行业三季报总结:行业复苏期,5G领跑.zip

    1. **行业复苏**:通信行业在经历了前期的波动后,开始进入复苏阶段。这可能反映了市场需求的回升、政策支持的加强以及企业自身的调整与创新。 2. **5G领跑**:5G技术作为通信行业的核心驱动力,引领了行业复苏的...

    靶场时统通信技术保障的质量管理.pdf

    技术巡回检查是质量管理中的一项重要工作,通常分为前期准备、实施检查和总结反馈三个阶段。前期准备阶段,需要制定详细的技术方案,并做好充分的准备。实施检查阶段,对通信设备进行全面的检查和测试,确保设备处于...

    单片机间的通信设计与研究

    仿真阶段的测试结果能够反映出设计中的潜在问题,如数据传输错误、通信延迟等,从而为实际硬件搭建提供可靠的参考依据。 多机通信设计的最终目标是构建一个稳定、高效的通信网络。这个过程中,不仅需要硬件电路和...

    通信技术的发展史探析.pdf

    在总结通信技术发展史的同时,我们也展望未来,通信技术的发展仍在继续。随着人工智能、量子通信、5G+等前沿技术的不断进步,未来的通信技术将更加智能化和个性化。可以预见,未来的通信技术将为人类生活带来...

    通信行业中报总结:4G扩容及5G带动无线相关业绩提振,非经常收益拉动行业ROE回稳-0909-华西证券-18页 - 副.pdf

    通信行业中报总结报告涵盖了5G技术的部署对通信行业业绩提振的影响,以及行业整体的财务健康状况。本报告基于2019年的数据和趋势,重点分析了以下几个方面: 1. 5G建设周期的初期特征:随着5G的启动,通信行业面临...

    智能变电站光纤通信链路检测方法探讨.pdf

    总结来说,智能变电站光纤通信链路的检测是一个系统性的过程,涉及到多个阶段和多个技术指标的检测。通过使用如OTDR这样的专业测试设备,可以确保光纤通信链路的高可靠性和高性能,从而保障智能变电站的稳定运行。...

    通信管道施工-通信施工组织设计

    总结来说,“通信管道施工-通信施工组织设计”文档详尽地阐述了通信管道从规划、设计、施工到验收的全过程,是通信工程人员的重要参考资料。它包含了项目管理、工程技术、安全规范和质量控制等多个方面的知识,对于...

    计算机通信中的网络安全问题思考.pdf

    总结来说,计算机通信网络安全是一项系统工程,涉及多学科的交叉,需要从技术、管理、教育等多角度综合施策,以应对不断演变的网络安全威胁。只有这样,我们才能在享受科技带来的便利的同时,保障个人和组织的信息...

    通信行业三季报总结:45G更迭周期,细分行业持续分化-1105-华西证券-16页.pdf

    【通信行业三季报总结】反映了4/5G更迭周期对通信行业的影响,各细分领域呈现出明显的分化趋势。在4G建设接近尾声、5G初期建设阶段,整体行业盈利受到下游运营商资本支出(Capex)的影响而下行。报告指出,4/5G交替...

    通信施工组织设计-铁路通信工程施工组织

    《通信施工组织设计-铁路通信工程施工组织》是关于铁路通信工程实施的重要文档,它涵盖了通信施工的全过程,从前期规划到后期实施与验收,详细阐述了各项关键环节和操作规范。这一文档对于理解和掌握铁路通信工程的...

    现代无线通信技术的现状分析与发展前景分析.pdf

    总结起来,现代无线通信技术正处于快速发展阶段,其现状表明了技术的不断成熟和广泛应用,而未来的发展趋势则强调技术融合、互补性增强、创新应用以及个性化服务。这预示着无线通信技术将在未来的通信事业中发挥更大...

    无线通信技术发展分析 (2).pdf

    在20世纪50年代初期,无线通信主要服务于军事用途,但受限于技术水平,传输速率低且易受环境因素影响。随后在50至60年代,通信设备器件开始应用于移动环境的专用系统,推动了半导体器件技术的发展,使得通信的便捷性...

    某通信公司能力体系建设项目访谈阶段汇报材料.ppt

    该通信公司能力体系建设项目的访谈阶段是项目初期的重要环节,旨在通过与各级部门的深入交流,收集和整理公司内部的职位分类、能力需求、组织结构及流程等方面的信息,为后续的能力模型构建和人才发展策略提供基础。...

Global site tag (gtag.js) - Google Analytics