第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

Socket編程-UDP協(xié)議發(fā)送和接收數(shù)據(jù)

標(biāo)簽:
Java

不知道什么是Socket编程和UDP协议的自己去查资料。

UDP协议发送和接收数据的步骤:
    发送:
        创建UDP发送端的Socket对象
        创建数据并把数据打包
        发送数据
        释放资源

    接收:
        创建UDP接收端的Socket对象
        创建数据包用于接收数据
        接收数据
        解析数据包
        释放资源

快速获取本机IP地址的方法:打开dos命令窗口,输入ipconfig,回车

使用多线程的目的是实现发送和接收都在一个窗口显示

//这是发送类
package UdpThreadPro;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Dictionary;
import java.util.Scanner;

public class UdpSend implements Runnable {
    public void run() {
        try {
            //创建数据报包Socket对象,DatagramSocket这个类表示用来发送和接收数据报包的套接字
            DatagramSocket ds=new DatagramSocket();
            System.out.println("开始聊天吧");
            while(true){
            //从键盘输入
            Scanner s=new Scanner(System.in);
            //将键盘输入的值存入字符串a
            String a=s.nextLine();
            //如果键盘输入886,则退出循环,结束聊天
            if(a.equals("886")){
                break;
            }
            //将字符串转化成字节数组
            byte bytes[]=a.getBytes();
            //创建ip地址对象
            //InetAddress类没有任何构造方法,但是调用它的getByName方法可以返回一个InetAddress类对象
            InetAddress iar = InetAddress.getByName("192.168.1.128");
            //创建数据报包,包含要发送的字节组数,字节数组长度,发送端的ip地址对象以及端口
            DatagramPacket p=new DatagramPacket(bytes, bytes.length, iar, 2048);
            //发送数据报包
            ds.send(p); 
            //清空字节数组,防止数据重叠
            bytes=null;
            }
            } catch (Exception e) {
                e.printStackTrace();
            }
    }
}
//这是接收类
package UdpThreadPro;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UdpReceive implements Runnable{
    @Override
    public void run() {
        try {
            //创建IP地址对象
            //InetAddress类没有任何构造方法,但是调用它的getByName方法可以返回一个InetAddress类对象
            InetAddress laddr = InetAddress.getByName("192.168.1.128");
            //创建数据报包Socket对象,指定该Socket的接口和IP地址,这样发送端才能找到指定的接收端
            DatagramSocket ds=new DatagramSocket(2048, laddr);
            while(true){
            //创建字符数组
            byte bytes[]=new byte[1024*1024];
            //创建数据报包接收数据
            DatagramPacket p=new DatagramPacket(bytes, bytes.length);
            //接收数据报包,包含收到的字节数组,实际长度,和发送方的 IP地址以及端口号**注意:此方法在接收到数据报包前一直阻塞
            ds.receive(p);
            //创建一个带长度的字节数组,p.getLength()表示接收到的数据的实际长度
            byte bytes2[]=new byte[p.getLength()];
            //解析数据
            bytes2=p.getData();
            //将字符数组转化成字符串,p.getLength()表示接收到的数据的实际长度
            String b=new String(bytes2, 0,p.getLength());
            //p.getAddress().getHostAddress()表示发送端的IP地址
            String a=p.getAddress().getHostAddress();
            //输出接收到的数据和发送端的ip地址
            System.out.println("from "+a+":"+b);
            //清空字节数组,防止数据重叠
            bytes2=null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
//这是测试类
package UdpThreadPro;
public class Test {
    public static void main(String[] args) throws InterruptedException {
        //创建接收端对象
        UdpReceive ur=new UdpReceive();
        //创建发送端对象
        UdpSend us=new UdpSend();
        //创建发送和接收线程
        Thread t1=new Thread(ur);
        Thread t2=new Thread(us);
        //启动线程
        t1.start();
        t2.start();

    }
}
點(diǎn)擊查看更多內(nèi)容
2人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
移動(dòng)開發(fā)工程師
手記
粉絲
9
獲贊與收藏
227

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消