UDP客户端
记得配合我Config配置表文章一块做
using UnityEngine;
using System.Collections;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine.UI;
public class UDP_Client : MonoBehaviour
{
public string recvStr;
private string UDPClientIP;
Socket socket;
EndPoint serverEnd;
IPEndPoint ipEnd;
byte[] recvData = new byte[1024];
byte[] sendData = new byte[1024];
int recvLen = 0;
Thread connectThread;
//配置文件管理类
public ConfigTest configTest;
[Header("本地端口"), SerializeField]
private int localPort;
[Header("目标端口"), SerializeField]
private int endPort;
public Text text;
void Start()
{
configTest = GetComponent<ConfigTest>();
localPort = int.Parse(configTest.dic["端口号"]["本地"]);
endPort = int.Parse(configTest.dic["端口号"]["对应"]);
UDPClientIP = configTest.dic["IP"]["ip0"]; ;//服务端的IP.自己更改
UDPClientIP = UDPClientIP.Trim();
InitSocket();
}
void InitSocket()
{
ipEnd = new IPEndPoint(IPAddress.Parse(UDPClientIP), endPort);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Bind(new IPEndPoint(IPAddress.Any, localPort));
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
serverEnd = (EndPoint)sender;
print("等待连接");
SocketSend("客户端连接成功");
print("连接");
//开启一个线程连接
connectThread = new Thread(new ThreadStart(SocketReceive));
connectThread.Start();
}
void SocketSend(string sendStr)
{
//清空
sendData = new byte[1024];
//数据转换
sendData = Encoding.UTF8.GetBytes(sendStr);
//发送给指定服务端
socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);
}
//接收服务器信息
void SocketReceive()
{
while (true)
{
recvData = new byte[1024];
try
{
recvLen = socket.ReceiveFrom(recvData, ref serverEnd);
}
catch (Exception e)
{
}
print("信息来自: " + serverEnd.ToString());
if (recvLen > 0)
{
recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);
}
print(recvStr);
}
}
//连接关闭
void SocketQuit()
{
//关闭线程
if (connectThread != null)
{
connectThread.Interrupt();
connectThread.Abort();
}
//最后关闭socket
if (socket != null)
socket.Close();
}
void OnApplicationQuit()
{
SocketQuit();
}
int i = 0;
void Update()
{
text.text = recvStr;
if (Input.GetKeyDown(KeyCode.Space))
{
++i;
SocketSend("发送消息给服务端:" + i);
}
}
}