赞
踩
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Globalization;
using System.Text;
using UnityEngine.UI;
using System.Runtime.InteropServices;
using System;
public class udp : MonoBehaviour {
// Use this for initialization
private UdpClient udpClient = null;
IPEndPoint host;
EndPoint ep;
public int port = 10021;
public string ipAdd = "127.0.0.0.1";
bool IsUdpcRecvStart = true;
byte[] recvData;
struct RecvData
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string str;
public int a;
public int b;
}
public static byte[] StructToBytes(object structObj)
{
int size = Marshal.SizeOf(structObj);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(structObj, buffer, false);
byte[] bytes = new byte[size];
Marshal.Copy(buffer, bytes, 0, size);
return bytes;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
public static object BytesToStruct(byte[] bytes, Type strcutType)
{
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, 0, buffer, size);
return Marshal.PtrToStructure(buffer, strcutType);
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
void Start () {
IPAddress ipAddress = IPAddress.Parse(ipAdd);
host = new IPEndPoint(IPAddress.Any, 0);
udpClient = new UdpClient(8008);
//ep = (EndPoint)host;
IsUdpcRecvStart = true;
// 设置为 非阻塞式UDP
udpClient.Client.Blocking = false;
//Thread th = new Thread(UdpRecv);
//th.Start();
}
// Update is called once per frame
void Update () {
byte[] test = { 1,1,1,1 };
//必须加上try 不然会报错。
try
{
//udpClient.Send(test, test.Length, host);
byte[] byteRecv = udpClient.Receive(ref host);
RecvData data = new RecvData();
data = (RecvData) udp.BytesToStruct(byteRecv, data.GetType());
Debug.Log(data.a);
Debug.Log(data.b);
Debug.Log(data.str);
}
catch
{
//Debug.Log("udp Error");
}
}
//废弃 线程模式
static void UdpRecv(object obj)
{
udp t = (udp)obj;
while (true)
{
Debug.Log("thread start...");
try
{
byte[] byteRecv = t.udpClient.Receive(ref t.host);
Debug.Log(byteRecv.Length);
}
catch
{
Debug.Log("udp Error");
break;
}
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。