基于Socket的JAVA网络编程

                                       基于SocketJAVA网络编程

      事实上,所谓的网络编程,简单来说就是在两台计算机上实现数据的交换,以达到彼此通信的目的,而在述说Socket之前,我想先理解一下JAVA Socket底层是怎样基于TCP/IP实现的。

1.理解TCP/IP协议组

           TCP/IP模型有四层结构:应用层、传输层、网络层、链路层。而TCP/IP协议是一组包括TCP协议,IP协议,UDP协议等的协议组。 其中IP协议是位于网络层的,TCPUDP协议位于传输层。通过IP协议可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同操作系统的网络。IP协议只保证计算机能够接收和发送分组数据。而TCPUDP协议则是两种传输数据流的方式。

2.传输层的TCPUDP协议的区别 

      那他们有什么区别呢?区别就是TCP协议时面向连接的,传输前双方要建立一条虚拟的通道,就好比打电话,只有电话被接通时,二者才可以通话;而UDP是一种无连接协议,它只需要知道目的地是什么就可以了,而不用管信息能否能否到达或者信息是否完整,就好比给别人发信息,即便对方已经停机,信息依然能发出去。既然UDP如此不可靠,那它的优势在哪呢?他的优势在于对于一些小的数据在传输时他的传输速度要比TCP协议快,只要数据大小每次不超过64K即可。我们经常使用ping命令来测试两台主机之间TCP/IP通信是否正常时,ping命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。而且JAVA Socket就是基于TCP协议实现的数据传输。

3.利用Socket建立连接

           创建两台机器的连接利用Socket在理解上比较简单,只需创建一个服务器和一个客户端,并让服务器进入等待客户机来连接的状态,代码示例如下

 

服务器:

//创建一个绑定在指定端口上的服务器对象
java.net.ServerSocket server=new ServerSocket(port);
System.out.println("服务器创建成功"+port+"等待来连接。。。");
			
//让服务器进入循环等待状态(阻塞) 并且一直等待其他客户机来连接
while(true){
      java.net.Socket  client=server.accept();
      System.out.println("来主动连接的客户机"+client.getInetAddress().toString());
}

 

客户机:

//创建客户端对象
Socket client=new Socket("localhost",port);

 

 

 

    建立连接之后,从Socket连接对象上获取输入输出流。

代码如下:

java.io.OutputStream outs=client.getOutputStream();
java.io.InputStream ins=client.getInputStream();

 

 

       

得到输入输出流之后,便可在像管道一样的流中开始传输数据了,如此便可实现基于JAVA Socket的简单通信啦!!!

 

猜你喜欢

转载自lxl-yes777.iteye.com/blog/1706770