黑马程序员_java网络编程

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


 

Blog_2_1  网络基础概念

网络编程:就是利编程语言来实现网络互连的不同计算机上运行的程序间可以进行数据交换。

网络通信三要素:IP地址、端口号、传输协议。

IP地址:为了使网络中的计算机能够通信,就为每台计算机指定一个标志号,通过这个标识号就可以指定要接受数据的计算机和识别发送的计算机,这个标志号就称为IP地址。

端口号:不同应用程序通信的窗口,值得注意的是端口的范围是0—65535,其中1—1024被用作知名服务器的端口。故在日常开发中一般使用1024以上端口号。

传输协议:计算机通信或网络设备通信的共同语言。如TCP协议,UDP协议。

Blog_2_2  IP地址的操作

(1)使用java中的InetAddress类对IP地址进行操作

在java中专门提供了一个对IP地址进行操作的类InetAddress,通过查看API可知InetAddress类没有构造方法,只能通过其静态方法创建InetAddress的对象,如下:

InetAddress idress=InetAddress.getByName(“wangyiyong-PC”);获取主机名为wangyiyong-PC的ip地址对象。通过该对象我们可以调用InetAddress类的一些功能,主要的功能有:

获取本地主机对象:getLocalHost ()

获取指定IP值或主机名的IP对象:getByName()

获取主机名:getHostName()

获取主机Ip地址:getHostAddress()

(2)两种常用的IP地址操作代码:

①获取本地主机IP地址并使用

InetAddress idress=InetAddress.getLocalHost();//获取本地主机的IP对象
System.out.println(idress.getHostName());//打印本地主机名字
System.out.println(idress.getHostAddress());//打印本地IP地址

②获取任意主机IP地址对象并使用:

InetAddress idress2=InetAddress.getByName(“wangyiyong-PC”);//括号中也可以直//接是IP地址
       System.out.println(idress.getHostName());//打印上面指定的主机名
System.out.println(idress.getHostAddress);//打印上面指定的主机IP地址

Blog_2_3  Socket

Socket: 用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。网络通信其实就是IO流在两个Socket间的通信。在java中提供了一个Socket类,用来建立计算机之间的通信。

Blog_2_4  UDP

(1) UDP:是User DatagramProtocol(用户数据报协议)的简称,是一种面向无连接的传输协议。

特点:将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。

(2) 使用UDP协议发送信息:

DatagramSocket ds=new DatagramSocket();
      byte[] bys ="hello我是UDP协议 ".getBytes();
      int len = bys.length;
      InetAddress address = InetAddress.getByName("192.168.1.2");
      int port = 10086;
      DatagramPacket dp = newDatagramPacket(bys,len,address,port);
      // 发送数据。
      ds.send(dp);
      // 释放资源。
   ds.close();

综述上面代码可知总结出UDP发送数据步骤如下:

A:创建发送端的Socket服务;

B:创建数据并把数据打包;

C:发送数据;

D:释放资源。

(3)使用UDP协议接收信息

DatagramSocket ds = new DatagramSocket(10086);
      // 创建一个数据包。
      byte[] bys =new byte[1024];
      DatagramPacket dp = new DatagramPacket(bys, bys.length);
      // 接受数据。
      ds.receive(dp);//此方法在接收到数据报前一直阻塞。
      // 解析数据,显示在控制台。
      InetAddress address = dp.getAddress();
      String ip =address.getHostAddress();
      byte[] bys2 = dp.getData();
      //public int getLength()
      int len = dp.getLength();
      String s = new String(bys2,0,len);
      System.out.println(ip +"---" + s);
      // 释放资源。
   ds.close();

由上面代码可知使用UDP接收数据的步骤如下:

A:创建接收端的Socket服务。

B:创建接收数据的数据包。

C:接收数据。

D:解析数据,并显示在控制台。

E:释放资源。

Blog_2_4  TCP

(1)   TCP:是Transmission Control Protocol的简称,是一种面向连接的传输层协议。

特点:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低

(2)   使用TCP发送信息:

      // 创建客户端Socket服务对象。需要指定服务器及其端口。
      Socket s = new Socket("192.168.196.212", 12306);
      // 获取输出流对象。
      OutputStream os = s.getOutputStream(); // 子类对象
      // 写数据。
      os.write("hello我是TCP协议 ".getBytes());
      // 释放资源。
    s.close();

tcp协议发送消息步骤总结:

A:创建客户端Socket对象

B:获取输出流,写数据

C:释放资源

(3)   使用TCP接收信息:

// 创建服务器端Socket服务对象。需要指定端口。
      ServerSocket ss = new ServerSocket(12306);
      Socket s =ss.accept(); // 注意要使用侦听并接受到此套接字的连接
      // 获取输入流对象。
      InputStream is= s.getInputStream();
      // 读取数据,并显示。
      String ip =s.getInetAddress().getHostAddress();
      byte[] bys =new byte[1024];
      int len = is.read(bys);
      String sss = new String(bys, 0, len);
      System.out.println(ip+"---"+sss);
      // 释放资源。
    ss.close();

TCP接收数据步骤总结:

A:创建服务器Socker对象

B:使用accept()方法监听客户端。

C:获取输入流,读取数据

E:释放资源

Blog_2_5  UDP和TCP的区别

 

TCP协议

UDP协议

面向连接

面向非连接

传输速度慢

传输速度快

有丢包重传机制

没有丢包重传机制

保证数据的正确性

在传输过程中可能丢包

 

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

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


 

你可能感兴趣的:(黑马程序员_java网络编程)