- 浏览: 13384 次
- 性别:
最新评论
一、网络通信的基本原理
现如今,出现了各式各样的聊天平台,像微信,飞信,YY,qq,交流社区等。这些都可以实现在一个电脑或手机上给另外的电脑或手机发送你想说的话或传送文件。那它是如何实现的呢?电脑之间或手机之间,或手机与电脑之间实现信息交流的基础就是网络。在网络互通的基础上,通过特定的通信协议,就可以在相应的平台上实现真正意义上的信息交流了。
上面说的或许太理论了,那我详细的介绍下互联的实质。在电脑连上网络之后,电脑就具备了一个独立的IP地址,以便另外的电脑或机器找到;IP地址在网络中标识一台机器的位置,但是,当A机器与B机器通信时,其实是这两台机器上的程序在通信,A如果想和B通信,它还必须得知道B机器等待在那个“端口”上;就像有客人到你家做客,只知道你家在第几幢是不行滴,还得知道是几号---在计算机中,用“端口号”这个数字标识机器上需要通信的某一个程序。
每一台机器都有从0~65535个端口号,其中的每一个数字,可供一个程序通信用,通常情况下0~1024的端口要尽量避免使用---我们称它为知名端口,例如打开网页时,则连结上的是服务器
上的80端口,在地址栏不需要输入这个端口号,是因为它是默认的;
要测试服务器上是否开放了某个端口,可以使用telnet命令,连结对方的端口;如果能连结上,则证明对方的端口是打开的。
二、建立简单的服务器
这个简单的服务器能够将客户机发送来的信息显示出来,并且再回送给客户机。
第一步:在指定端口上创建一个java.net.ServerSocket对象,如下代码:
//实例化ServerSocket,给予端口号9999 ServerSocket server=new ServerSocket(9999);
第二步:当服务器创建成功后,就像的的手机开机后,进入待机状态一样,你也要让服务器进入等待状态,当然是等待其它的客户机来连结它:
//在等待客户机连结进入,进入后,生成一个Socket对象 Socket client=server.accept();
这段代码需要特别注意:调用服务器对象server.accept()方法时,程序就会“阻塞”在这个调用上,或者说”卡”到这里---直到有一个客户机连结上来,这个方法才会返回一个Socket类对象----这个对象就代表了服务器与客户机之间的连结:当你拔通我的手机时,我的机手机中可以理解为存在着一个“通话对象“,就相当于此的client对象;以后我们(服务器)与客户机的通信,就在这个Socket类型的对象client上进行(如果想同时多个客户端进行信息交流,这里需用到线程)。
第三步:从Socket连结对象上调用方法得到输入输出流:
//通过Socket对象获取输入\输出流
OutputStream out=client.getOutputStream();
InputStream ins=client.getInputStream();
以上三步关键代码可以理解为:第一步创建ServerSocket对象如你买了一部手机,端口号的给予如你给手机上了一个手机;第二步创建Socket对象如同你的手机在等待被他人呼叫;第三步输入输出流的获取就如同通话已连接,out:是你说出去;ins:是你接收到对方的话语。
下面给出简单实现服务器功能的代码:
public class Telnet { public static void main(String args[]) throws Exception{ new Telnet().init(); } private void init() throws Exception { //实例化ServerSocket,给予端口号9999 ServerSocket server=new ServerSocket(9999); while(true){ //在等待客户机连结进入,进入后,生成一个Socket对象 Socket client=server.accept(); //通过Socket对象获取输入\输出流 InputStream in=client.getInputStream(); OutputStream out=client.getOutputStream(); String chat="你好!"; byte[] b=chat.getBytes(); //服务器把信息传到Socket对象 out.write(b); //读取客户端发过来的信息 int t=in.read(); while(t!=32){ System.out.println("结束"); t=in.read(); } chat="拜拜"; byte[] c=chat.getBytes(); //服务器把信息传到Socket对象 out.write(c); //关闭输入输出流 out.close(); in.close(); //关闭socket client.close(); } } }
链接图像显示:
回车后:
这里只是简单的实现了客户端接收信息,我们还可以实现客户端与服务器之间的前台聊天功能,而不是运用后台运行连接。
客户端的前台运行实现关键代码:
//ip地址 String str="192.168.0.111" //端口号 int port=9999; Socket client=new Socket(str,port);
下面就需要你自己去想怎么解决服务器与客户端的连接及后续功能了,我就不给出代码了。
发表评论
-
线程的同步通信与线程范围内的数据共享问题
2013-10-02 22:05 1325线程的同步通信与线程范围内的数据共享问题一、线程的同步通信 什 ... -
多线程初谈——线程的创建与互斥问题
2013-10-01 18:13 1403多线程初谈——线程的创建与互斥 对于线程起初也很是不 ... -
简单的bmp文件打开与保存
2013-07-01 22:24 884简单的bmp文件打开与保 ... -
分形浅谈——科赫曲线和L-System
2013-06-24 22:47 1233分形浅谈开始接触到分行图时,感觉很难,无法下手,只能做出第一层 ... -
对关键字final、static的理解
2013-05-10 23:36 535一、final关键字 fin ... -
对关键字的理解——访问权限
2013-05-10 16:17 598关键字public、pr ... -
队列的定义及运用
2013-03-23 14:58 645队列简称队,是限制在表的一端进行插入操作,而在表的另一端进行删 ... -
重绘方法的重写利用
2013-03-22 21:44 618重绘是为了在画布上保留原始痕迹的一种方法,他的目的是用来保存你 ... -
数组的定义及递归的运用
2013-03-22 21:43 1023一、数组有一维数组、 ... -
监听器与变量的作用域
2013-03-22 21:41 706监听器是用来实现一些可控操作的工具,如你在打开一个QQ界面的时 ... -
java中的继承
2013-03-08 00:31 566Java中的接口 什么是接口?不是以class定义的类而是以i ... -
Java中类的继承、重写、自动转型以及多态
2013-03-06 01:13 716Java中类的继承、重写、自动转型以及多态 1) 类的继承 在 ... -
java的构造器方法、方法重载和引用传递
2013-03-04 23:55 730Java的构造器方法、方法重载与引用传递 一、 构造器方法 构 ... -
JAVA语言中的类与对象
2013-03-04 00:08 732Java语 ...
相关推荐
10丨网络通信优化之通信协议:如何优化RPC网络通信?.html
网络通信资料网络通信资料网络通信资料网络通信资料网络通信资料网络通信资料网络通信资料网络通信资料网络通信资料网络通信资料
网络通信.rar网络通信.rar网络通信.rar网络通信.rar网络通信.rar网络通信.rar网络通信.rar
linux 网络通信程序,包括服务器端和客户端,一个完整的TCP,udp 通信程序
浅谈现代网络通信技术之卫星通信.pdf
java 网络通信 实例 java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例java 网络通信 实例
C#网络通信程序设计 无水印版。2积分带走。
网络通信工具,服务端和客户端连接测试工具,可单条发送,循环发送,模拟多客户端发送,本工具可以作为网络通信工具或压力测试工具, Java NIO Socket编程,需JAVA运行环境
网络通信技术.ppt网络通信技术.ppt网络通信技术.ppt网络通信技术.ppt网络通信技术.ppt网络通信技术.ppt网络通信技术.ppt网络通信技术.ppt网络通信技术.ppt网络通信技术.ppt
网络通信3.rar网络通信3.rar网络通信3.rar网络通信3.rar
网络通信书籍源码网络通信书籍源码
这是一个介绍Android使用Url进行网络通信示例
机场自动气象观测系统网络通信技术浅谈.pdf
网络通信中涉及的相关基础知识,分章节总结了网络通信中所涉及的概念及相关解释。概括了解网络通信知识。
java实验实现网络通信,服务端
最新网络通信协议手册
vb.net 网络通信小例子vb.net 网络通信小例子vb.net 网络通信小例子
试谈多媒体网络通信之流媒体.doc
易语言 网络通信 客户端和服务端的通信 易语言 网络通信 客户端和服务端的通信