java中的UDP和TCP
来源:互联网 发布:php人力资源管理系统 编辑:程序博客网 时间:2024/05/24 23:14
一 网络基础
网络通信三要素:
- IP
- 端口号
- 协议
IP地址的本质:是一个由32位的二进制数据组成的数据,为了方便记忆IP地址就把IP地址切成了4份,每份8bit。
1.1 InetAddress(IP类)
常用方法:
getLocalHost();//获取本机的IP地址对象getHostAddress(); //返回一个IP地址的字符串表示形式getHostName();//获取主机名getByName("IP或者主机名");//根据IP地址的字符串形式或者主机名生成一个IP地址对象----很常用
1.2 端口 —- 端口就是一个(0-65535)标识符
1.3 通讯协议
通讯协议分为两种:
UDP通讯协议
TCP通讯协议
二 UDP
特点:
- 将数据封装为数据包,面向无连接。
- 每个数据包大小限制在64K中
- 因为无链接,所以不可靠,速度快。
使用示例:
//发送端代码 public class Sender{ public static void main(String[] args) { //建立udp服务 DatagramSocket datagramSocket = new DatagramSocket(); String data = @"upd的数据"; //把数据封装到数据包中 DatagramPacket(buf, length, address) buf:发送的数据内容 length:发送数据内容的大小 address:发送目的IP地址对象 port:端口号 DatagramPacket packet = new DatagramPacket(data.getBytes(),data.getBytes().length,InetAddress.getLocalHost(),9091); //发送数据包 datagramSocket.send(packet); //关闭资源 datagramSocket.close(); }}----------//接收端代码public class Receive { public static void main(String[] args) { //建立udp服务,并且监听一个端口 DatagramSocket socket = new DatagramSocket(9091); //准备空的数据包用于存放数据 byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf,buf.length); //接收数据 数据实际上存储在buf数组中 receive是一个阻塞型方法,没有接收到数据就一直阻塞 socket.receive(packet); //取出数据 String data = new String(buf,0,packet.getLength());//getLength() 获取数据包存储了几个字节 //关闭资源 socket.close(); }}
注意:
每个网络程序都有自己所处理的特定格式的数据,如果接收到的数据不符合指定的格式,那么就会被当成垃圾数据丢弃。
udp协议中,有一个IP地址称作为广播地址(就是主机号为255的地址–xxx.xxx.xx.255),给广播IP地址发送消息的时候,在同一个网络段的机器都可以接收到信息。
三 TCP
特点:
- tcp是基于IO流进行数据传输的,面向连接。
- tcp进行数据传输的时候是没有大小限制的。
- tcp通过三次握手的机制。
- tcp是面向连接的,所以速度慢。
- tcp是区分客户端与服务端的
使用示例:
//客户端代码public class Client{ public static void main(String[] args) { //建立连接 Socket socket = new Socket(InetAddress.getLocalHost(),9090); //获取输出流 OutputStream os = socket.getOutPutStream(); //向服务端发送数据 os.write("这是客户端的数据".getBytes()); //关闭资源 socket.close();//因为os是从socket中获取的,所以socket关闭的时候os也关闭了 }}----------//服务端代码public class Server{ public static void main(String[] args) { //建立tcp的服务端,并且监听一个端口 ServerSocket serverSocket = new ServerSocket(9090); //接受客户端的连接 Socket socket = serverSocket.accept();//accept() 这是一个阻塞型的方法,没有客户端与其连接时,会一直等待下去 //获取输入流对象,读取客户端发送的内容 InputStream is = socket.getInputStream(); byte[] buf = new byte[1024]; int length = is.read(buf); System.out.println("接收到的数据:"+new String(buf,0,length)); serverSocket.close();//因为socket是从serverSocket中获取的,所以serverSocket关闭的时候socket也关闭了 }}
阅读全文
0 0
- java中的UDP和TCP
- Java中的TCP/UDP
- java中的网络编程详解 TCP 和UDP
- 【美乃滋酱学java】UDP和TCP
- java基础---UDP和TCP
- Java TCP和UDP简介
- java网络中的UDP/TCP协议
- Java中的TCP/UDP网络通信编程
- Java中的TCP/UDP网络通信编程
- UDP和TCP中的伪首部
- iOS中的TCP/IP和UDP
- (Java 基础知识)Java TCP和UDP
- Java 网络概述 和 TCP 和 UDP
- Java网络编程:TCP和UDP
- Java 使用 TCP 和 UDP 传输文件
- JAVA网络编程TCP和UDP
- java——TCP和UDP
- Java 网络编程之TCP和UDP
- 10.16(周一)
- 关于 maven 项目打包 乱码问题
- java客户端连接kafka简单测试
- 伪数组排序(例:li标签)
- 缓存更新的套路
- java中的UDP和TCP
- xfire webService发布以及客户端调用(带验证头)
- hdu 5988 Coding Contest 费用流
- Prim算法
- 神经机器翻译(Neural Machine Translation)系列教程
- http协议
- Linux Unit3--管理输入输出
- STL 模板库中迭代器 iterator 失效问题
- Android旧版本NDK的下载