热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Unity]简单UDP

一、代码usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Ne

一、代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
//针对回调函数,定义一个消息list,在Update里处理消息
// private List UDPOrders = new List();
//void Update()
//{
// if (UDPOrders.Count > 0)
// {
// Log.text = "Recv:" + UDPOrders[0];
// //处理一个清空一个
// UDPOrders.RemoveAt(0);
// }
//}
public delegate void RecvCallBack(string msg);
public class AnUDP
{
//默认使用ASCII
private int UdpPort;//端口号
private bool IsUdpVaild;//是否可用
private Socket UdpSocket;//socket
private Thread RecvThread;//接收线程
private RecvCallBack CallBack;//回调函数
public AnUDP()
{
UdpPort = 0;
CallBack = null;
IsUdpVaild = false;
}
public bool Open(string SelfIP,int SelfPort)
{
Debug.Log(SelfIP);
UdpPort = SelfPort;
//定义连接的服务器ip和端口,可以是本机ip,局域网,互联网
IPEndPoint UdpPoint = new IPEndPoint(IPAddress.Parse(SelfIP), UdpPort);
//定义套接字类型,在主线程中定义
UdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
UdpSocket.Bind(UdpPoint);
//
IsUdpVaild = true;
return true;
}
public void Close()
{
if (RecvThread != null)
{
RecvThread.Abort();
RecvThread.Interrupt();
}
UdpSocket.Close();
}
public bool SendTo(string TargetIP, int TargetPort,string msg)
{
if (!IsUdpVaild) return false;
//清空发送缓存
byte[] sendData = new byte[1024];
//数据类型转换
sendData = Encoding.ASCII.GetBytes(msg);
//
EndPoint sendPoint = new IPEndPoint(IPAddress.Parse(TargetIP), TargetPort);
//发送给指定客户端
UdpSocket.SendTo(sendData, sendData.Length, SocketFlags.None, sendPoint);
return true;
}
public void StartRecv(RecvCallBack _call)
{
if (!IsUdpVaild) return;
if (RecvThread==null)
{
RecvThread = new Thread(new ThreadStart(SocketReceive));
RecvThread.Start();
}
//接收回调
CallBack = _call;
}
private void SocketReceive()
{
while (true)
{
try
{
//创建消息
byte[] recvData = new byte[1024];
EndPoint recvPoint = new IPEndPoint(IPAddress.Any, UdpPort);
//接收
int recvLen = UdpSocket.ReceiveFrom(recvData, ref recvPoint);
if (recvLen > 0)
{
string data = Encoding.ASCII.GetString(recvData, 0, recvLen);
if (CallBack!=null)
{
CallBack(data);
}
}
}
catch (Exception e)
{
}
}
}
}

二、针对回调函数

1.定义消息队列
private AnUDP UPD;
private List UDPOrders = new List();
2.定义回调函数
void OnUDPRecv(string data)
{
UDPOrders.Add(data);
}
3.启用UDP并设置回调
UPD = new AnUDP();
if(UPD.Open(SelfIP,Selfport))
{
UPD.StartRecv(OnUDPRecv);
}
4.发送
UPD.SendTo("127.0.0.1",10000,"Hello");

三、针对SocketException

    出现错误:SocketException: 在其上下文中,该请求的地址无效。一般都是你的ip地址不是所在网段里的地址




推荐阅读
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
  • 目前正在做毕业设计,一个关于校园服务的app,我会抽取已完成的相关代码写到文章里。一是为了造福这个曾经帮助过我的社区,二是写文章的同时更能巩固相关知识的记忆。一、前言在爬取教务系统 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 与.Net大师Jeffrey Richter面对面交流——TUP对话大师系列活动回顾(多图配详细文字)...
    与.Net大师JeffreyRichter面对面交流——TUP对话大师系列活动回顾(多图配文字)上周末很有幸参加了CSDN举行的TUP活动, ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • keras归一化激活函数dropout
    激活函数:1.softmax函数在多分类中常用的激活函数,是基于逻辑回归的,常用在输出一层,将输出压缩在0~1之间,且保证所有元素和为1,表示输入值属于每个输出值的概率大小2、Si ... [详细]
  • 作者一直强调的一个概念叫做oneloopperthread,撇开多线程不谈,本篇博文将学习,怎么将传统的IO复用pollepoll封装到C++类中。1.IO复用复习使用p ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了利用AndroidCamera2的照相机api实现实时的图像采集与预览相关的知识,希望对你有一定的参考价值。&n ... [详细]
  • 获取服务器的IP地址方法以DNS法较为简单实用,如下:  usingSystem.Net;  privatevoidButtonIP_Click(objectsender,Syst ... [详细]
  • 系列目录Guava1:概览Guava2:Basicutilities基本工具Guava3:集合CollectionsGuava4:GuavacacheGuava6:Concurre ... [详细]
  • 引言随着企业安全意识的增强以及现代化管理水平的提高,对设备的远程监控在工业控制系统中得到了越来越广泛的应用。近年来,Web技术广泛普及,把 ... [详细]
  • 三小时掌握计算机网络基础(通俗易懂)
    目录1.网络层次划分2.OSI七层网络模型3.IP地址4.子网掩码及网络划分5.ARPRARP协议6.路由选择协议7.TCPIP协议8.UDP协议 9.DNS协议 ... [详细]
author-avatar
nana-Wang2602915845
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有