java网络编程---udp

一、socket

socket就是网络通信提供的服务

网络的通信,也就是socket之间的通信

数据在两个socket间通过io传输


http和socket的区别:

http是建立在tcp上的应用层协议,其肯定也是通过socket是实现的,它是一种短链接的形式,只有客户端向服务端发送请求,彼此才建立链接。

socket是tcp和udp的一个通信编程接口。


二、java udp的发送操作

在java jdk包中,

发送数据的思路

1、java.net.DatagramSocket 负责udp数据包的发送

2、DatagramPacket负责将数据打包(制定ip,端口和数据)

3、DatagramSocket 建立的对象调用send发送将数据发送出去

4、关闭


package com.udp_send;


import java.net.SocketException;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;
/*
 * 思路:
 * 创建udp的socket服务
 * 将数据打包
 * 将udp的数据通过socket包发送出去
 * 关闭socket服务
 */


public class udp_send {


public static void main(String[] args)throws SocketException,UnknownHostException,IOException{
//用于发送和接收数据包套接字
DatagramSocket d1 = new DatagramSocket();

//给数据打包
//DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
    //构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
String data = "hello world";
byte[] buf = data.getBytes();
DatagramPacket pac = new DatagramPacket(buf,buf.length,InetAddress.getByName("172.31.21.252"),8899);

d1.send(pac);

d1.close();

}
}


三、java udp的接收操作

思路:

1、用java.net.DatagramSocket建立接收socket对象

2、接收对象之后,接收到的是一个数据包。。所以我们要建立一个java.net.DatagramPacket的数据包

3、DatagramSocket建立的对象调用receive方法将数据接收到2中的对象

4、利用DatagramPacket的一些方法getAddress()等,各个数据接收过来。

package com.udp_receive;


import java.net.SocketException;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;
//思路
//创建 udp socket服务,必须要明确端口号
//创建数据包,将接收到的数据包存储
//调用receive,接收数据


public class udp_receive {
public static void main(String[] args)throws SocketException,IOException{
DatagramSocket  r1 = new DatagramSocket(8899);



byte[] a = new byte[1024];
DatagramPacket pac =  new DatagramPacket(a,a.length);

//接收数据包
r1.receive(pac); //将数据接收到pac中

//将数据解析
String ip = pac.getAddress().getHostAddress();
int port = pac.getPort();
String www = new String(pac.getData());

System.out.println("ip is:"+ip);
System.out.println("port is:"+port);
System.out.println("content is:"+www);



}


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值