黑马程序员_java的网络学习二_06

来源:互联网 发布:淘宝卖家怎么提现金 编辑:程序博客网 时间:2024/06/03 11:30

<a href="http://www.itheima.com" target="blank">android</a>

<a href="http://www.itheima.com" target="blank">java培训</a>期待与您交流

 

一,什么是socket

         所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。以J2SDK-1.3为例,SocketServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的

        socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电,有的提供110伏交流电,有的则提供有线电视节目。客户软件将插头插到不同编号的插座,就可以得到不同的服务。

二,TCP传输

1•包括客户端和服务端,即Socket为客户端,ServerSocket为服务端。

2•创建服务端对象:ServerSocket(int port):指定接收的客户端的端口

3Socket accept():真挺并接受到此套接字的连接

4void shutdownInput():此套接字的输入流至于“流的末尾”

5void shutdownOutput():禁用此套接字的输出流

6InputStream getInputStream():返回此套接字的输入流

7OutputStream getOutputStream():返回套接字的输出流

TCP通信原理图

 

三,代码示例 

通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。 因为tcp是面向连接的。所以在建立socket服务时,就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。

客户端 

需求:给服务端发送给一个文本数据。  

import java.io.*;   

import java.net.*;   

class  TcpClient {   

     public static void main(String[] args) throws Exception    

    {   

        //创建客户端的socket服务。指定目的主机和端口    

         Socket s = new Socket("127.0.0.1",10003);               

         //为了发送数据,应该获取socket流中的输出流。    

         OutputStream out = s.getOutputStream();      

         out.write("tcp ge men lai le ".getBytes());      

         s.close();   

     }   

}   

 

服务端:   

   需求:定义端点接收数据并打印在控制台上。 

    

   服务端

   1,建立服务端的socket服务。ServerSocket(); 并监听一个端口。 

   2,获取连接过来的客户端对象。 

       通过ServerSokcet accept方法。没有连接就会等,所以这个方法阻塞式的。 

   3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发来的数据。并打印在控制台。 

   4,关闭服务端.(可选) 

      

class  TcpServer{   

     public static void main(String[] args) throws Exception   

     {    

        //建立服务端socket服务。并监听一个端口。       

             ServerSocket ss = new ServerSocket(10003);       

        //通过accept方法获取连接过来的客户端对象。    

             while(true){   

             Socket s = ss.accept();                

          //从客户端对象获取ip地址    

             String ip = s.getInetAddress().getHostAddress();   

             System.out.println(ip+".....connected");       

         //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。    

             InputStream in = s.getInputStream();               

             byte[] buf = new byte[1024]; //创建缓冲区  

             int len = in.read(buf);   //输入流对象往缓冲区里面存数据    

             System.out.println(new String(buf,0,len));  //构造String并打印     

             s.close();//关闭客户端.    

         }    

         //把服务端也关闭了    

         ss.close();    

    }   

}   

通信的原理 (服务器端是拿着客户端的对象去调用该客户端对象的方法来获取该客户端输入输出流的,这样就不会混乱。形成了一一对应的关系,不会出现发错的情况)

 

 

四,演示TCP的传输的客户端和服务端的互访。    

      需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。   

      1,建立socket服务。指定要连接主机和端口。 

      2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。 

      3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。 

      4,关闭客户端资源。 

  

 

五,TCP代码实践

建立一个文本转换服务器

      客户端给服务端发送文本,服务单会将文本转成大写在返回给客户端。

      而且客户度可以不断的进行文本转换。当客户端输入over时,转换结束。

分析:

客户端:

  既然是操作设备上的数据,那么就可以用IO技术,并依IO操作规律操作。

源:键盘录入;

目的:网络设备,即网络输出流。

-->操作的是文本数据,可选字符流,并加入高效缓冲区。

步骤:

1.   建立服务。

2.   获取键盘录入

3.   将数据发给服务端

4.   之后去服务端返回数据

5.   结束,关闭资源

  

服务端:

源:socket读取流;

目的:socket输出流。

客户端

 

 

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima

 

0 0
原创粉丝点击