柚子快報邀請碼778899分享:網(wǎng)絡(luò) c#一個udp代碼
柚子快報邀請碼778899分享:網(wǎng)絡(luò) c#一個udp代碼
不使用socket進(jìn)行
unity下的
private Thread connectThread;
private UdpClient udpClient;
public Queue LogQueue = new Queue();
public static UDPManager Instance{get;private set;}
private void Awake()
{
Instance = this;
}
private void Start()
{
udpClient = new UdpClient();
udpClient.EnableBroadcast = true;
connectThread = new Thread(new ThreadStart(SocketReceive));
Thread.Sleep(1000);
connectThread.Start();
}
private void Update()
{
SendMessanger();
}
void SocketReceive()
{
UdpClient udpClient = new UdpClient(6900);
try
{
while (true)
{
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
byte[] recvData = udpClient.Receive(ref remoteIpEndPoint);
string recvStr = Encoding.UTF8.GetString(recvData);
LogQueue.Enqueue(recvStr);
}
}
}
catch (Exception)
{
throw;
}
finally
{
udpClient.Close();
}
}
void SendMessanger()
{
if (LogQueue.Count <= 0) return;
string strArray = LogQueue.Dequeue() as string;
if (strArray!=null)
{
Debug.Log(strArray);
}
}
public void SendAllStart(string content)
{
byte[] bytes = Encoding.UTF8.GetBytes(content);
udpClient.Send(bytes, bytes.Length, new IPEndPoint(IPAddress.Loopback, 6910));
}
c#其他下使用:
public partial class NetSever
{
private static NetSever instance;
public static NetSever Instance
{
get
{
if (instance == null)
{
instance = new NetSever();
}
return instance;
}
}
static UdpClient udpClient;
static int connectPort;
public static Queue LogQueue = new Queue();
static IPAddress remoteIP = IPAddress.Parse("127.0.0.1");
IPEndPoint remotePoint = new IPEndPoint(remoteIP, connectPort);//實(shí)例化一個遠(yuǎn)程端點(diǎn)
//網(wǎng)絡(luò)端口喚醒
public void Init()
{
//初始化協(xié)議
if (GetIP() == "")
{
Console.WriteLine ("當(dāng)前IP地址不存在,或沒有信號進(jìn)行連接!");
return;
}
udpClient = new UdpClient();
udpClient.EnableBroadcast = true;
connectPort = 6900;
//添加事件訂閱信息
AddEventNeight();
開啟一個線程
Task task = new Task(SocketReceive);
task.Start();
}
private void AddEventNeight()
{
}
string GetIP()
{
//本機(jī)名
string hostName = Dns.GetHostName();
//會返回所有地址,包括IPv4和IPv6
IPAddress[] addressList = Dns.GetHostAddresses(hostName);
foreach (IPAddress ip in addressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
return "127.0.0.1";
}
static void SocketReceive()
{
UdpClient client = null;
string receiveString = null;
//實(shí)例化一個遠(yuǎn)程端點(diǎn),IP和端口可以隨意指定,等調(diào)用client.Receive(ref remotePoint)時會將該端點(diǎn)改成真正發(fā)送端端點(diǎn)
IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);
//NetSever.Instance.SendAllStart("網(wǎng)絡(luò)開啟");
UdpClient udpClient = new UdpClient(6910);
try
{
while (true)
{
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
byte[] recvData = udpClient.Receive(ref remoteIpEndPoint);
receiveString = Encoding.UTF8.GetString(recvData);
string[] date = null;
if (receiveString.Contains("\r\n"))
{
receiveString = receiveString.TrimEnd((char[])"\r\n".ToCharArray());
}
if (receiveString.Contains("010"))
{
date = receiveString.Split('-');
receiveString = "010";
}
if (receiveString.Contains("openFile"))
{
date = receiveString.Split('-');
receiveString = "openFile";
}
switch (receiveString)
{
case "Text":
Console.WriteLine("網(wǎng)絡(luò)端口測試?。?!已收到信息");
NetSever.Instance.SendAllStart("網(wǎng)絡(luò)已打開");
break;
}
}
}
}
catch (Exception)
{
//NetSever.Instance.SendAllStart("網(wǎng)絡(luò)已打開");
throw;
}
finally
{
udpClient.Close();
}
}
//發(fā)送端口
public void SendAllStart(string content)
{
byte[] bytes = Encoding.UTF8.GetBytes(content);
UdpClient udpClient = new UdpClient();
try
{
udpClient.Connect("127.0.0.1", 6900);
udpClient.Send(bytes, bytes.Length);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
fanily
{
udpClient.Close();//這里要記得關(guān)閉
}
}
}
至于為啥這么寫,只能說經(jīng)驗(yàn)之談
柚子快報邀請碼778899分享:網(wǎng)絡(luò) c#一個udp代碼
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。