黑马程序员——day23UDP TCP

来源:互联网 发布:点击可以优化排名吗 编辑:程序博客网 时间:2024/05/18 05:29

----------------------    android培训    java培训   期待与您交流!    ----------------------   

网络编程

1,找到对方IP
2,数据要发送到对方指定的应用程序上。为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。
为了方便称呼数字,叫做端口。逻辑端口。
3,定义通信规则。这个通信规则称为协议。
国际组织定义了通用协议TCP/IP。

ISO七层模型
从应用层到物理层数据封包,传输到对面层,然后从物理层到应用层进行数据拆包。
物理层 数据链路层 网络层 传输层 会话层 表示层 应用层

TCP/IP四层模型
主机至网路层      网际层 传输层        应用层


IP地址:InetAddress
  网络中设备的标识
  不易记忆,可用主机名
  本地回环地址:127.0.0.1 主机名:localhost

端口号
  用于标识进程的逻辑地址,不同进程的标识
  有效端口:0到65535,其中0到1024系统使用或保留端口

传输协议
  通讯的规则
  常见协议:TCP UDP

UDP
  将数据及源和目的封装成数据包中,不需要建立连接
  每个数据包的大小限制在64K内
  因无连接,是不可靠协议
  不需要建立连接,速度快
例如:生活中去邮局寄东西(UDP),东西装盒子里(封包),
写寄送地址(接收端口)天堂路到地狱街,没找到丢包。但是
速度快,比你自己送过去快。   QQ,游戏等都是UDP。

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


Socket就是为网络服务提供的一种机制。
通信的两端都有Socket
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。


import java.net.*;
/*
需求:通过udp传输方式,将一段文字数据发送出去。
定义udp的接收端。
思路:
1,建立udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
方便于明天哪些数据过来该程序可以处理。

2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。 
*/

public class UdpSend
{
     
 public static void main(String[] args) throws Exception
 {
  //1,创建udp服务,通过DatagramSocket对象。
  DatagramSocket ds = new DatagramSocket();
  
  //2,确定数据,并封装成数据包.DatagramPacket(byte[] buf,int length, InetAddress address,int port)
  byte[] buf = "udp ge men lai le".getBytes();
  DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),10000);
  
  //3,通过socket服务,将已有的数据包发送出去,通过send方法。
  ds.send(dp);
  //关闭资源
  ds.close();
 }
}

/*
 需求:
 定义一个应用程序,用于接受udp协议传输的数据并处理的。
 
 思路:
 1,定义udpsocket 服务。
 2,定义一个数据包,因为要存储接收到的字节数据。
 因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
 3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中,
 4,通过数据包对象的特有功能,将这些不同的数据取出。打印到控制台。
 5,关闭资源。
 
 
public class UdpRece
{
     
 public static void main(String[] args) throws Exception
 {
  //1,创建udp socket,建立断点。
  DatagramSocket ds = new DatagramSocket(10000);
  
  //2,定义数据包,用于存储数据。
   byte[] buf = new byte[1024];
   DatagramPacket dp = new DatagramPacket(buf,buf.length);
  
  //3,通过服务的receive方法将收到数据存入数据包中。 
   ds.receive(dp);

  //4,通过数据包的方法获取其中的数据。
  String ip = dp.getAddress().getHostAddress();
  
  String data = new String(dp.getData(),0,dp.getLength());
  
  int port = dp.getPort();
  
  System.out.println(ip+"::"+data+"::"+port);

  */
  

----------------------    android培训    java培训   期待与您交流!    ----------------------   

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


原创粉丝点击