`
xiaozhouzhou
  • 浏览: 13384 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

网络通信见解之谈

 
阅读更多

一、网络通信的基本原理
    现如今,出现了各式各样的聊天平台,像微信,飞信,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);
       
下面就需要你自己去想怎么解决服务器与客户端的连接及后续功能了,我就不给出代码了。
  • 大小: 2.5 KB
  • 大小: 1.9 KB
  • 大小: 477 Bytes
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics