UDP 和 TCP笔记。

看了很多资料,在这就不写相关链接了。^ ^

在这总结一下,常见的传输协议,TCP(Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol 用户数据报协议),端口地址0~65535,

其中0~1023用于知名网络服务和应用,用户的普通网络应用应该在1023以上。

主要是对UDP比较陌生,所以重点做一下关于DatagramSocket的相关笔记。

UDP协议在java中对应的类是Java.net.DatagramSocket,而TCP协议对应的是Java.net.ServerSocket(服务端)和Java.net.Socket(客户端).

DatagramSocket有如下方法:

public DatagramSocket()--无参构造函数,那么构造的数据报套接字会绑定到本地主机任何可用的端口上;

public DatagramSocket(int port)--构造的数据报套接字会绑定到指定的本地主机的端口上;

public DatagramSocket(int port,InetAddr)--创建的数据报套结字会绑定的指定的本地地址,即指定网卡发送和接受数据。


如果在创建DatagramSocket的时候没有指定网卡的IP地址,在发送数据时,底层网卡驱动会自动选择一块网卡去发送;在接受数据时,会接受所有网卡收到的与端口一致的数据。


发送信息时,可以不指定端口号;接受消息时,必须要指定端口号,因为要接受指定的数据。

发送数据使用DatagramSocket.send(DatagramPacket p);接受数据的时候使用DatagramSocket.receive(DatagramPacket p).



数据载体DatagramPacket:

public DatagramPacket(byte[] buff,int lenght)--构造DatagramPacket,用来接受长度为lenght的数据包;

public DatagramPacket(byte[] buff,int lenght,InetAddress addr,int port)--构造DatagramPacket,用来将长度为length的数据包发送到指定主机上的指定端口上。


接受数据时使用第一种构造方法,发送数据时使用第二种构造方法。


tcp与udp区别:

  1. 基于连接与无连接
  2. 对系统资源的要求(TCP较多,UDP少)
  3. UDP程序结构较简单
  4. 流模式与数据报模式
    TCP保证数据正确性,UDP可能丢包
    TCP 保证数据顺序,UDP不保证

java编程区别:

tcp是java.net.ServerSocket(用于服务器端)和java.net.Socket(用于客户端);

UDP是java.net.DatagramSocket.

UDP程序例子

发送程序:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpSend {

public static void main(String[] args) throws Exception {
   DatagramSocket ds = new DatagramSocket();
   String str = "hello , world!";
   DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.0.105"),3000);
   ds.send(dp);
   ds.close(); //关闭连接
}
}

接收程序:

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpRecv {
public static void main(String[] args) throws Exception {
   DatagramSocket ds = new DatagramSocket(3000);
   byte[] buf = new byte[1024];
   DatagramPacket dp = new DatagramPacket(buf,buf.length);
   ds.receive(dp);
   String str = new String(dp.getData(),0,dp.getLength());
   System.out.println(str);
   System.out.println("IP:" + dp.getAddress().getHostAddress() + ",PORT:" + dp.getPort());
   ds.close();
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值