`

“步入”通信以及遇到的那些小问题

阅读更多

这两天步入java通信的学习。

首先来说一下服务器。服务器严格的讲是管理资源并为用户提供服务的计算机。通俗一点讲就是等待用户连接
并对用户发过来的信息进行处理。而客户机是连接服务器并访问服务器资料的计算机。

因此,一个简单服务器的构建步骤为:1、创建服务器对象 2、等待客户机的连入 3、一旦有客户机连入后获取
客户机的输入输出流 4、对客户机发来的数据进行处理
而一个简单的客户机的构建步骤就更为简单了:1、创建客户机对象,并连接服务器 2、用输入输出流发送数据或获取
服务器发来的数据

但是在服务器与客户机之间收发消息必须有网络协议:
1、客户机与服务器都必须了解对方发来的数据是什么样的协议并且预先知道所要处理的所有步骤
2、客户机与服务器都必须遵守协议
3、协议必须明确并无歧义

先演示一下简单的服务器(协议为以回车为结束符号的字节)

public class ServeThread extends Thread {
	private java.net.Socket client;
	private java.io.OutputStream out;

	public ServeThread(Socket client) {
		this.client = client;
	}

	public void run() {
		dealChat(client);
	}

	/**
	 * 处理客户机发来的消息
	 * 
	 * @param client
	 */
	private void dealChat(Socket client) {
		try {
			// 数据的读入和输出
			out = client.getOutputStream();
			java.io.InputStream ins = client.getInputStream();
			DataInputStream dis = new DataInputStream(ins);

			// 输入
			String s = "欢迎来到游戏世界\r\n";
			sendMsg(s);

                                                 String input = readString(ins);// 读入字符串 
			 while (!input.equals("bye")) {   
                                                 System.out.println("客户机说" + input);
			 // 将客户机发送来的内容发回客户机 
			 s = "服务器收到" + input + "\r\n"; sendMsg(s);
			 input = readString(ins);// 读入字符串 
			 }
			  // 客户机断开与服务器的连接 
			 s = "欢迎下次再来";
			 sendMsg(s);
			 client.close();
                                } catch (IOException e) {
			e.printStackTrace();
	                }
	}

	/**
	 * 从输入流中读取的字节形成一句话返回
	 * 
	 * @param ins
	 *            输入流
	 * @return 字符串
	 * @throws IOException
	 */
	private String readString(InputStream ins) throws IOException {

		StringBuffer sb = new StringBuffer();// 字符缓冲区
		char c = 0;
		while (c != 13) {// 当未换行时
			int i = ins.read();// 读取客户机发来的一个字节
			c = (char) i;// 将字节转换成一个char
			sb.append(c);// 将这个字符加入到字符缓冲区中
		}
		String inputs = sb.toString().trim();// 将字符缓冲区中的字符连成字符串
		return inputs;
	}

	/**
	 * 封装发送方法
	 * 
	 * @param s
	 *            要发送的字符串
	 */
	private void sendMsg(String s) {
		try {
			byte[] date = s.getBytes();
			out.write(date);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

而深入一点的是各种不同数据(如文件,消息等等)的传输,这个的话就要设计协议了,

例如

4 byte(类型) 4 byte(整数) a byte    
1(表示消息) 消息长度 a 消息内容    

2(表示文件)

文件名长度 a 文件长度 b 文件名 文件数据
4 byte(类型) 4 byte(整数) 4 byte(整数) a byte b byte

 

在数据的传送接收过程中,大概来说总是会遇到这些小问题:

1、如客户机输出的消息长度为a,但是输出的消息内容却并没有达到长度a,这个就必须在客户机输出之前要进行验证,否则传送过去的数据会出错

2、服务器接收到的数据要从字节数组转换成字符串,String s=data.tostring();这样写是错误的,会直接把data数组的地址转成string,而应该改写成String s = new String(data);

3、用什么方法输出的,就必须用什么方法接收

如 用OutputStream 输出,服务器就必须用InputStream读入;用DataOutputStream输出,就要用DataInputStream读入

 

 

2
0
分享到:
评论

相关推荐

    通信行业:通信测试,5G时代的卖水人~通过是德科技看全球测试产业步入多维增长时代-0214-中泰证券-46页.pdf

    5G通信技术的兴起引领了科技产业的全新变革,它不仅为运营商、设备制造商、组件供应商以及终端应用带来了全新的发展机遇,而且在这个过程中,通信测试领域扮演了至关重要的角色,被誉为5G时代的"卖水人",即为这场...

    软件公司实习报告通信专业

    实习过程中遇到的最大问题是绘图技巧的生疏。不过,通过不断实践和老师的耐心指导,他逐步恢复了对AutoCAD的熟练掌握,同时也学会了如何优化图纸布局和布线,使得图纸更加专业和合理。这种实践经验不仅加深了他对...

    通信专业的就业调查报告

    #### 三、在就业时可能会遇到的问题 - **考研还是就业**:这是一个重要的决策点,学生需要根据自己的职业规划和当前就业市场的状况来决定是否继续深造。 - **工作是否与专业对口**:虽然通信专业毕业生可以选择与...

    电子信息、通信、电类专业将会遇到的面试题大全

    电子信息、通信、电类专业是信息技术领域的重要组成部分,这些专业的学生在求职过程中,尤其是在技术面试环节,会遇到一系列的专业问题,旨在评估他们对基础知识的掌握程度以及解决实际问题的能力。以下是从给定文件...

    通信专业实习报告

    - **遇到的问题及解决情况**:实习过程中遇到的主要问题以及解决方法。 - **实习总结**:对实习的整体评价和个人收获。 ### 2. **实习任务及成果** - **制图组的任务**:该组主要负责绘制深度覆盖的示意图和驻地...

    通信类毕业生求职宝典

    - **撰写目的**: 作者希望通过分享真实案例和个人经验,为即将步入职场的学生们提供实用的指导。 #### 二、求职面临的多重压力 - **来自学校的压力**: 同学们通过不同的途径(自身努力或家庭背景)获得工作机会,...

    光纤通信-第一章(与“光纤”有关的文档共27张).pptx

    1960年,激光器的发明为光通信打开了全新的局面,尤其是红宝石激光器的诞生,使得光通信从理论步入实际应用的可能。在探索时期,尽管初期尝试如麻省理工学院的实验遇到困难,但梅曼的红宝石激光器为后续的研究带来了...

    5G无线通信技术概念及其相关应用.pdf

    5G无线通信技术是当前通信领域的重要里程碑,它在4G技术的基础上实现了大幅度的提升,为用户带来了更快的传输速度、更强的兼容性以及更低的技术成本。这项技术不仅仅是通信技术的简单迭代,更是信息技术与人类生活...

    江西师大05级通信工程就业市场调查报告

    面试官会通过提问来了解求职者的沟通能力、团队合作精神以及解决问题的能力等。 - **小心招聘陷阱**:求职过程中可能会遇到虚假招聘信息或诈骗行为,求职者需提高警惕,避免上当受骗。 #### 五、如何提高我们的...

    全球卫星通信产业发展前沿报告(2019).pdf

    本报告详细探讨了全球卫星通信产业的发展态势、我国卫星通信的发展现状、技术预见、遇到的工程难题以及政策建议。 一、研究概述 报告首先概述了卫星通信行业的最新发展,包括高通量卫星(HTS)、非地球同步轨道...

    通信专业实习周记.doc

    - **自学能力的培养**:面对工作中遇到的难题,自学相关知识成为解决问题的重要途径。通过查阅资料和运用大学所学的专业知识,可以有效应对工作中的挑战。 ### 3. 工作习惯的养成 #### 日常工作习惯 - **准时守纪*...

    中小企业如何信息化.pptx

    然而,中小企业在信息化过程中可能会遇到一些困惑,如认识上的误区、资金投入的担忧、技术人才的短缺以及管理规范性问题。为了克服这些困难,中小企业可以设定明确的信息化目标,例如增强市场开拓、管理能力和创新力...

    科技行业日报:中国移动5G消息App稍后会重新上线.pdf

    这一事件说明了5G技术在应用层面的具体尝试,以及在开发和测试过程中可能遇到的技术挑战。 2. 通信行业的表现: 在当日的证券市场中,通信行业表现较好,涨幅为1.04%,排名第三。这体现了5G技术及相关行业在资本...

    计算机控制技术课程设计指导.doc

    根据给定文件的信息,我们可以提炼出以下几个关键知识点: ### 计算机控制技术课程设计的目的...通过这样的实践项目,学生不仅能够加深对专业知识的理解,还能提升解决实际问题的能力,为将来步入职场打下坚实的基础。

    计算机专业毕业生实习报告模板.docx

    实习不仅有助于学生将所学的计算机技术和信息管理理论应用于实际,还能培养他们的计算机应用技能和信息管理技能,将理论与实践相结合,解决工作中遇到的各种信息处理问题。此外,实习还能让学生了解社会需求,明确...

    毕业实习日记

    - **遇到的问题及解决方法**:分享在实习过程中遇到的挑战以及如何克服这些问题。 - **个人感悟**:结合实习经历,谈谈对未来职业发展的思考。 - **建议与展望**:基于自己的实习体验,提出对学校教学或企业实习制度...

    爱立信2015校园招聘

    这些经验包括笔试和面试准备的方法、求职过程中可能遇到的问题以及如何在实际工作中快速成长。 总之,爱立信2015校园招聘的内容非常丰富,通过上述知识点,我们可以看到该公司在通信行业的地位、所承载的愿景、在华...

    大学生电子专业学生的实习报告.docx

    - **问题解决**:遇到困难时,学会独立解决问题,提升自信心和应对挑战的能力。 4. **实习总结**: - **工作态度**:强调在工作中需保持耐心和细心,尤其是在编程时,一个小错误可能导致整个程序无法正常运行。 ...

    计算机组装实习报告.pdf

    例如,当遇到电脑打印乱码问题时,需要判断并解决打印机驱动问题;在处理系统安装问题时,需要检测硬件故障,如内存条损坏,并进行相应的更换或修复。这些实际操作经验有助于巩固计算机专业的基础知识,如操作系统...

    5G无线网络及关键技术_何晓露.pdf

    5G技术的应用不仅限于移动通信,还包括物联网、智能城市、远程医疗、自动驾驶等多个领域,预示着通信技术将步入全新的智能化和高效率时代。随着技术的不断成熟和普及,5G将在未来社会的各个方面扮演越来越重要的角色...

Global site tag (gtag.js) - Google Analytics