Udp实现消息的发送和接收、以及图片的上传

//Udp实现消息的发送和接收

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner;

public class UdpUtils implements Runnable {

    //定义Socket数据包服务
    private DatagramSocket socket;

    public UdpUtils(int port) {
        try {
            //创建socket数据包服务
            socket = new DatagramSocket();
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    //发送
    public void send(String content, String ip, int port) {
        //获取接收端 的IP 和 端口号
        InetSocketAddress address = new InetSocketAddress(ip, port);
        //创建数据包  并将 消息内容 、地址 传入
        DatagramPacket dp = new DatagramPacket(content.getBytes(),
                content.getBytes().length,address);
        try {
            //发送数据包
            socket.send(dp);
            try {
                Thread.sleep(1);    //防止Udp传输时,包错误。
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //接收
    @Override
    public void run() {
        byte[] buf = new byte[1024];
        //创建数据包 将 发送过来的 消息内容 取出
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        while (true) {
            try {
                //接收数据包
                socket.receive(dp);
            //    System.out.println(new String(dp.getData(), 0, dp.getLength()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

//Test 测试
class TestUdpUtils{
    public static void main(String[] args) {
        UdpUtils utils = new UdpUtils(10010);
        Thread thread = new Thread(utils);
        thread.start();
        Scanner input = new Scanner(System.in);
        while(true){
            String msg = input.next();
            if(msg.equals("exit")){
                input.close();
                System.exit(0);
            }
            utils.send("Send:" + msg, "127.0.0.1", 10010);
        }
    }
}

//Udp实现图片的上传

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class UdpMapUtils implements Runnable {

    private DatagramSocket socket;
    private File file;
    private String ip;
    private int port;

    public UdpMapUtils(File file, String ip, int port) {
        this.file = file;
        this.ip = ip;
        this.port = port;
        try {
            socket = new DatagramSocket(port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    public void send(File file) {

        InetSocketAddress address = new InetSocketAddress(ip, port);
    //    System.out.println(address);
        BufferedInputStream bis = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(file));
            byte[] buf = new byte[1024];
            while (bis.read(buf) != -1) {
                DatagramPacket dp = new DatagramPacket(buf, buf.length, address);
                socket.send(dp);
                Thread.sleep(2);
            }
            byte[] b = "over".getBytes();
            DatagramPacket dp = new DatagramPacket(b, b.length,address);
            socket.send(dp);
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            socket.close();
        }
    }

    @Override
    public void run() {

        BufferedOutputStream bos = null;

        try {
            bos = new BufferedOutputStream(new FileOutputStream(file));
            byte[] buf = new byte[1024];
            while (true) {
                DatagramPacket dp = new DatagramPacket(buf, buf.length);
                socket.receive(dp);
                if(new String(buf,0,dp.getLength()).equals("over"))
                    break;
                bos.write(buf);
                bos.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            socket.close();
        }
    }
}
时间: 2024-10-25 19:39:00

Udp实现消息的发送和接收、以及图片的上传的相关文章

msgrcv,msgsnd进程通信,消息的发送和接收

//进程通信,消息的发送和接收 //client.c #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <err

用PHP尝试RabbitMQ(amqp扩展)实现消息的发送和接收

消费者:接收消息 逻辑:创建连接-->创建channel-->创建交换机-->创建队列-->绑定交换机/队列/路由键-->接收消息 生产者:发送消息 逻辑:创建连接-->创建channel-->创建交换机对象-->发送消息

DICOM医学图像处理:DIMSE消息发送与接收“大同小异”之DCMTK fo-dicom mDCM

背景: 从DICOM网络传输一文开始,相继介绍了C-ECHO.C-FIND.C-STORE.C-MOVE等DIMSE-C服务的简单实现,博文中的代码给出的实例都是基于fo-dicom库来实现的,原因只有一个:基于C#的fo-dicom库具有高封装性.对于初学者来说实现大多数的DIMSE-C.DIMSE-N服务几乎都是"傻瓜式"操作--构造C-XXX-RQ.N-XXX-RQ然后绑定相应的OnResponseReceived处理函数即可.本博文希望在前几篇预热的基础上,对比DCMTK.fo

Bluemix结合RabbitMq实现消息发送与接收实例

什么是RabbitMq? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求. 什么是Bluemix? BlueMix 是 IBM 基于 Cloud Foundr

Chromium的IPC消息发送、接收和分发机制分析

由于Chromium采用多进程架构,因此会涉及到进程间通信问题.通过前面一文的学习,我们知道Browser进程在启动Render进程的过程中会建立一个以UNIX Socket为基础的IPC通道.有了IPC通道之后,接下来Browser进程与Render进程就以消息的形式进行通信.我们将这种消息称为IPC消息,以区别于线程消息循环中的消息.本文就分析Chromium的IPC消息发送.接收和分发机制. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Chrom

cocos2dx 消息发送与接收

     cocos2dx有个自定义事件可以实现消息的发送和接收,叫EventListenerCustom.它是通过一个字符串来标识事件名称的.下面介绍下,我实现的这个消息的发送和接收.      首先,我们定义2个类,一个消息接收类,一个消息发送类.代码如下:       //消息接收 class cMsgReceiver { public: virtual void RecMsg(int iMsgId, void* pInfo, int iSize) { } }; //消息发送 class

Java秒杀系统实战系列~整合RabbitMQ实现消息异步发送

摘要: 本篇博文是“Java秒杀系统实战系列文章”的第八篇,在这篇文章中我们将整合消息中间件RabbitMQ,包括添加依赖.加入配置信息以及自定义注入相关操作组件,比如RabbitTemplate等等,最终初步实现消息的发送和接收,并在下一篇章将其与邮件服务整合,实现“用户秒杀成功发送邮件通知消息”的功能! 内容: 对于消息中间件RabbitMQ,想必各位小伙伴没有用过.也该有听过,它是一款目前市面上应用相当广泛的消息中间件,可以实现消息异步通信.业务服务模块解耦.接口限流.消息分发等功能,在微

邮件发送超大附件,上传下载特别慢,怎么解决?

目前,已有不少邮箱如QQ邮箱.网易邮箱等支持超大附件,可以发送2G或3G大小的文件.但是诸多邮箱发送超大附件普遍存在以下问题: 首先,邮件发送大文件对文件大小有限制,超过上限的超大附件无法发送:其次,超大附件上传.下载的速度有限,而且速度也不稳定:再次,即便上传成功之后,如果对方的邮箱接收附件的大小也会有限制,甚至会导致邮件发送失败. 作为最常用的办公工具之一,邮箱附件上传下载慢.传输中断.无法发送超大附件等问题,是职场人士的一大困扰.怎么解决这个问题? 推荐一款可以通过邮箱发送超大附件的工具-

Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代表用户的请求. ServletResponse – 代表用户的响应. 本篇博客讲解: ServletRequest – 代表用户的请求. ServletResponse – 代表用户的响应. 表单中的多选框参数接收. 文件的上传技术. ServletRequest : ServletRequest