176 lines
5.7 KiB
C#
176 lines
5.7 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Net.Sockets;
|
||
using System.Net;
|
||
using System.Threading;
|
||
using UnityEngine;
|
||
using System.Text;
|
||
using System.Net.NetworkInformation;
|
||
using System;
|
||
|
||
public class UdpConnect : SingleTon<UdpConnect>
|
||
{
|
||
public string editString = "hello wolrd"; //编辑框文字
|
||
//以下默认都是私有的成员
|
||
private Socket socket; //目标socket
|
||
private EndPoint serverEnd; //服务端
|
||
private IPEndPoint ipEnd; //服务端端口
|
||
private string recvStr; //接收的字符串
|
||
private string sendStr; //发送的字符串
|
||
private byte[] recvData = new byte[1024]; //接收的数据,必须为字节
|
||
private byte[] sendData = new byte[1024]; //发送的数据,必须为字节
|
||
private int recvLen; //接收的数据长度
|
||
private Thread connectThread; //连接线程
|
||
|
||
|
||
public void InitSocket()
|
||
{
|
||
string ip = DataManager.Instance.RoomPersonsItem.ip;
|
||
int port = int.Parse(DataManager.Instance.RoomPersonsItem.port);
|
||
ip = "127.0.0.1";
|
||
port = 8899;
|
||
ipEnd = new IPEndPoint(IPAddress.Parse(ip), port);
|
||
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||
|
||
socket.Bind(ipEnd);
|
||
//ip = DataManager.Instance.RoomPersonsItem.ip;
|
||
//port = int.Parse(DataManager.Instance.RoomPersonsItem.port);
|
||
IPEndPoint sender = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4001);
|
||
serverEnd = (EndPoint)sender;
|
||
Debug.Log("waiting for sending UDP dgram");
|
||
|
||
//建立初始连接,这句非常重要,第一次连接初始化了serverEnd后面才能收到消息
|
||
//SocketSend("hello");
|
||
|
||
//开启一个线程连接,必须的,否则主线程卡死
|
||
connectThread = new Thread(new ThreadStart(SocketReceive));
|
||
connectThread.Start();
|
||
}
|
||
|
||
|
||
public void InitSocket(string message)
|
||
{
|
||
//string ip = DataManager.Instance.RoomPersonsItem.ip;
|
||
//int port = int.Parse( DataManager.Instance.RoomPersonsItem.port);
|
||
//ip = "";
|
||
//port = 8899;
|
||
//ipEnd = new IPEndPoint(IPAddress.Parse(ip), port);
|
||
//socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||
//IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
|
||
//serverEnd = sender;
|
||
//Debug.Log("等待链接");
|
||
//SocketSend(message);
|
||
//Debug.Log("连接成功");
|
||
//connectThread = new Thread(new ThreadStart(SocketReceve));
|
||
//connectThread.Start();
|
||
}
|
||
|
||
public void SocketSend(string sendStr)
|
||
{
|
||
//清空发送缓存
|
||
sendData = new byte[1024];
|
||
//数据类型转换
|
||
sendData = Encoding.ASCII.GetBytes(sendStr);
|
||
//发送给指定服务端
|
||
socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);
|
||
}
|
||
|
||
public void SocketSend(char[] sendStr)
|
||
{
|
||
//清空发送缓存
|
||
sendData = new byte[1024];
|
||
//数据类型转换
|
||
sendData = Encoding.ASCII.GetBytes(sendStr);
|
||
//发送给指定服务端
|
||
socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);
|
||
}
|
||
|
||
public void SocketSend(byte[] sendByte)
|
||
{
|
||
//清空发送缓存
|
||
sendData = new byte[1024];
|
||
//数据类型转换
|
||
sendData = sendByte;
|
||
//发送给指定服务端
|
||
socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);
|
||
}
|
||
char[] recvChar;
|
||
void SocketReceive()
|
||
{
|
||
//进入接收循环
|
||
while (true)
|
||
{
|
||
//对data清零
|
||
recvData = new byte[1024];
|
||
//获取客户端,获取服务端端数据,用引用给服务端赋值,实际上服务端已经定义好并不需要赋值
|
||
recvLen = socket.ReceiveFrom(recvData, ref serverEnd);
|
||
//Debug.Log("message from: " + serverEnd.ToString()); //打印服务端信息
|
||
//输出接收到的数据
|
||
recvStr = Encoding.ASCII.GetString(recvData, 0, recvLen);
|
||
//recvData = Encoding.ASCII.GetBytes(recvData, 0, recvLen);
|
||
Debug.Log("我是客户端,接收到服务器的数据" + recvStr);
|
||
if (recvStr.Contains("01"))
|
||
{
|
||
Debug.Log("01 心率");
|
||
}
|
||
else if (recvStr.Contains("02"))
|
||
{
|
||
Debug.Log("02 呼吸次数");
|
||
if (DataManager.Instance.bodyNum.Count > 0)
|
||
{
|
||
var data = DataManager.Instance.bodyNum[0];
|
||
//ui.Init("呼吸次数:" + data.breathingNum);
|
||
UIManager.Instance.ShowHint("呼吸次数:" + data.breathingNum);
|
||
}
|
||
}
|
||
else if (recvStr.Contains("03"))
|
||
{
|
||
Debug.Log("03 体温");
|
||
}
|
||
else if (recvStr.Contains("22"))
|
||
{
|
||
Debug.Log("22 瞳孔");
|
||
}
|
||
else if (recvStr.Contains("25"))
|
||
{
|
||
Debug.Log("25 瞳孔对光反射");
|
||
}
|
||
else if (recvStr.Contains("24"))
|
||
{
|
||
Debug.Log("24 功能眨眼");
|
||
}
|
||
else if (recvStr.Contains("f2"))
|
||
{
|
||
Debug.Log("f2 气泵");
|
||
}
|
||
|
||
Debug.Log("我是客户端,接收到服务器的数据" + recvData);
|
||
//for (int i = 0; i < recvChar.Length; i++)
|
||
//{
|
||
// var item = recvChar[i];
|
||
// //var temp = Convert.ToInt32(item.ToString(), 16);
|
||
// //var temp = Convert.ToInt16(item.ToString());
|
||
// Debug.Log(recvChar[i] + "___"+ item);
|
||
//}
|
||
}
|
||
}
|
||
|
||
void SocketQuit()
|
||
{
|
||
//关闭线程
|
||
if (connectThread != null)
|
||
{
|
||
connectThread.Interrupt();
|
||
connectThread.Abort();
|
||
}
|
||
//最后关闭socket
|
||
if (socket != null)
|
||
socket.Close();
|
||
}
|
||
|
||
public void OnApplicationQuit()
|
||
{
|
||
SocketQuit();
|
||
}
|
||
}
|