`

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

阅读更多

这两天步入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
分享到:
评论

相关推荐

    移动通信技术-移动通信路测分析.pdf

    本文将深入探讨移动通信路测分析的必要性,以及在教学过程中如何通过DT测试软件教授学生掌握实际操作技能,提高解决通信网络中常见问题的能力。 移动通信技术是指在移动条件下实现无线通信的技术,它允许用户在移动...

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

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

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

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

    通信专业的就业调查报告

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

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

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

    通信专业实习报告

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

    毕业生通信工程认识实习报告范文.doc

    在撰写实习报告时,毕业生们需要仔细回顾在实习期间所参与的项目、遇到的问题以及解决方法,这有助于加深对通信工程理论知识的理解。同时,报告还需要反映出实习生对于行业发展趋势的观察和分析,以及对未来职业发展...

    【通信工程专业的生产实习报告】.docx

    此外,实习期间,学生们还被要求观察、记录并分析在生产过程中遇到的问题,并尝试提出解决方案。这一过程不仅锻炼了学生们的问题分析和解决能力,还培养了其良好的职业素养和团队合作精神,为将来步入工作岗位打下了...

    通信类毕业生求职宝典

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

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

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

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

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

    通信技术实习总结(第二学期).docx

    每当遇到问题或错误时,我总是第一时间反思并寻求解决方案,避免同样的错误再次发生。通过不断地学习和实践,我逐渐培养出了更加成熟的问题解决能力。 在实习结束之际,我意识到,调整就业心态对于即将步入社会的...

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

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

    电子通信毕业设计资料_0499、频率PWM控制均可调模块DXP资料及其相关资料.rar

    在实际应用过程中,可能会遇到的问题及解决方案也在资料中有所体现,这些对于解决开发过程中遇到的问题非常有帮助。 最后,“资料来源.txt”文件则可能是对整个压缩包内所有资料的来源进行说明,这有助于用户判断...

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

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

    通信专业实习周记.doc

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

    通信:“泽字节”时代投资报告系列一-硅光:“超越摩尔”新路径,厚积薄发大未来.pdf

    如今,我们正步入“泽字节”时代,数据量爆发性增长,网络流量每9-12个月翻一番。在此背景下,硅光技术作为一种超越摩尔定律的新路径,为光通信设备的升级提供了新的解决方案。 硅光技术的核心优势在于其独特的集成...

    中小企业如何信息化.pptx

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

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

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

Global site tag (gtag.js) - Google Analytics