ISAP/Assets/Scripts/Net/UdpConnect.cs

176 lines
5.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}