浅谈网络通信

浅谈网络通信

暑假集训这段时间,我们重点学习了网络通信。还没有接触网络通信时,我认为网络通信是一件很神奇的事情。你看看,现在几乎所有的应用软件都是基于网络的,可想而知,网络通信是多么的重要。抱着对通信的几分期待的同时,我想,这网络通信是不是很难学呢?

在老师没讲课之前,我拿了那本刚刚发的书看了一下。首先我觉得通信做的事情多了,因为通信是双方的事情。所以,要完成一个通信项目,至少得有两个模块要被搭起来,一个是服务器,另一个就是客户机。由于刚刚开始对这方面很好奇,所以,我就按照书上的,一遍遍的抄代码,慢慢理解。但是,抄来抄去,我感觉就那几句话,就那么一个套路,是死的东西。这时候我就想,肯定是有什么细节书上没提到。

                        // 创建服务器对象
			ServerSocket server = new ServerSocket(port);
			System.out.println("服务器创建成功在端口" + port);
			// 等待客户端连接
			Socket s = server.accept();
 

 

到了胡老师上课,第一节课他就开门见山的指出,网络通信如果说有新的东西的话,那么就是一句话,一个套路。至于你想把通信做成什么样子,那都是靠前面的知识了。反正第一结课我觉得好无聊,就那么几句话整来整去的。到了第二节课以后,我才明白网络通信的精髓。通信就是两个人打电话,首先肯定是个套路,要建立连接。然后就是两个人之间的信息交互。所以说重点就落在信息交互这一块了。

 

	// 获取输入输出流对象
	dis = new DataInputStream(client.getInputStream());
	dos = new DataOutputStream(client.getOutputStream());
 

两个人打电话时怎么知道对方讲的是什么呢?他们首先了解对方的语言。听的懂,电话打的才有意义。否则打电话干什么呢?而怎么才能让服务器和客户机能正常的交流呢?这里就引入了一个协议的概念。

 

/**
	 * 处理客户端发送的信息
	 */
	public void recvMsg() {
		try {
			while (true) {
				// 读取信息类型
				int shape = dis.readByte();
				switch (shape) {
				case 0:// 接收到的是一个字符串消息
					int len = dis.readByte();// 字符串长度
					String s = "";
					for (int i = 0; i < len; i++) {
						s += dis.readChar();
					}
					ta.append(s);
					System.out.println("服务器接受到:" + s);
					break;
				case 1:// 接受到一条直线
					int x1 = dis.readInt();
					int y1 = dis.readInt();
					int x2 = dis.readInt();
					int y2 = dis.readInt();
					g.drawLine(x1, y1, x2, y2);
					break;
				case 2:
					break;
				case 255:// 与服务器断开连接
					System.out.println("客户端断开连接");
					client.close();
					break;
				}
			}
		} catch (Exception ef) {
			ef.printStackTrace();
		}
	}
 

首先要明白的就是,双方必须遵守协议才能通信。就像打电话一样,我在这边说汉语,你在那边说英语(假设双方只懂一门语言),我根本就不知道你在说什么,你也不知道我在说什么,通信就根本没通起来。所以如果要让通信通起来的话,必须要有一门共同的语言支持,对服务器和客户端来说这就叫协议。

总体来说呢,通信我主要就花时间在处理协议这一块。学习协议给我的感受就是,无规矩不成方圆,自由是建议在规则之上的。

猜你喜欢

转载自joe243634401.iteye.com/blog/1612964