蓝杰通信总结

             蓝杰通信总结

在如今这个信息主导的世界中,人们的生活时时刻刻的在和通信相互交融着。也许,生活的忙碌让人们忽略了通信的存在。但不能否认的是,人们在打电话,上QQ,MSN,人人的时候,都无形的运用了通信技术。那么什么是通信技术呢?

在没有学习通信技术之前,觉得通信好神奇好神奇,为什么人与人之间相隔万里就能视频,语音实现通信呢!在学习了通信原理之后,恍然发现其实通信神马的就是浮云~~~那我们言归正传,浅谈一下什么是通信。

我们就以具体的项目为例,具体的分析通信到底是什么。首先说明一下项目的具体要求:我们是要运用通信技术,实现群聊功能,除此之外我们还要实现客户端之间画图的共享功能。好那我们就开始谈谈怎样实现通信吧!

通过这阶段的学习,我们现在实现的通信首先是运用Socket技术创建服务器与客户端来实现的。服务器就是等待别人来连接的机器。客户机就是主动去连接别人的机器了。
我们来先实现服务器的功能
1.     创建一个服务器SocketSerever对象,port为服务器为此通信程序开辟的端口号:
                           // 创建绑定到特定端口的服务器套接字对象ss
			ServerSocket ss = new ServerSocket(port);


2. 前面已经说过了服务器是等待连接的机器,首先想让其他的客户端连接上我们的服务器我们的服务器处于待机状态,调用accept()方法,注意此方法被调用时程序会阻塞,一直到有一个客户端连接到服务器阻塞解除,程序继续执行
// 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
				Socket s = ss.accept();


3.     这样我们就建立起了一个服务器,但这样还不能通信,因为还没有传输的管道。但是管道里传的是什么呢?通过学习,我们了解到其实究其根本就是传输的字节,更根本的传的就是01字符串。所以我们用流管道来传输信息。
由于通信的建立是在请求,应答的机制上的,所以一个Socket既要有输入流,又要有输出流。
	dis = new DataInputStream(s.getInputStream());
				dos =new DataOutputStream(s.getOutputStream());


客户端的实现其实和服务器差不多,只不过由于是主动连接的所以就少了第二部。

  
根据上面的代码,就能实现通信功能了。下面说几点需要注意的方面。
1. 服务器应该时刻监听,是否有客户端前来连接。所以不能连接一次后就挂断。
while (true) {
				// 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
				Socket s = ss.accept();
				dis = new DataInputStream(s.getInputStream());
				dos =new DataOutputStream(s.getOutputStream());
			}


2. 实现群聊功能时,要想所有的服务器发送消息,所以要使用线程。一个客户端就是一个线程。
// 使服务器一直处于侦听状态
			while (true) {
				// 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
				Socket s = ss.accept();
				dis = new DataInputStream(s.getInputStream());
				dos =new DataOutputStream(s.getOutputStream());
			
				CilentThread ct = new CilentThread(s,dis,dos,list);
				CilentThread.addSocket(ct);
				ct.start();
				
			}


3. 协议的规定:我们大家都知道,网络通信中协议是至关重要的。协议就是计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。如何定义自己的协议是实现具体功能的约束规则。比如我们实现网络画图板时,协议是这样定义的:byte+int+int+int+int:类型+x1+y1+x2+y2  而接收文本信息时,协议为:类型+字符串长度+字符串。有效的定义协议,可以是程序高效的运行。

总之,通信这块是个没有极限的挑战,你的心有多高,你就能到达一个什么样的高度。

猜你喜欢

转载自14789852399.iteye.com/blog/1614218
今日推荐