不和你多BB,直接上代码
接收端
using UnityEngine;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
public class UDPServer : MonoBehaviour
{
public string recvStr;
Socket socket;
EndPoint clientEnd;
IPEndPoint ipEnd;
string sendStr;
byte[] recvData = new byte[1024];
byte[] sendData = new byte[1024];
int recvLen;
Thread connectThread;
//初始化
void InitSocket()
{
ipEnd = new IPEndPoint(IPAddress.Any, 8888);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Bind(ipEnd);
//定义客户端
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
clientEnd = (EndPoint)sender;
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, clientEnd);
}
//服务器接收
void SocketReceive()
{
while (true)
{
recvData = new byte[1024];
recvLen = socket.ReceiveFrom(recvData, ref clientEnd);
// print("已连接到: " + clientEnd.ToString()); //打印客户端信息
recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);
Debug.Log(recvStr + "收到的");
//将接收到的数据经过处理再发送出去
// sendStr = "来自服务器: " + recvStr;
// SocketSend(sendStr);
}
}
//连接关闭
void SocketQuit()
{
//关闭线程
if (connectThread != null)
{
connectThread.Interrupt();
connectThread.Abort();
}
//最后关闭socket
if (socket != null)
socket.Close();
Debug.LogWarning("断开连接");
}
// Use this for initialization
void Start()
{
InitSocket(); //在这里初始化server
}
void OnApplicationQuit()
{
SocketQuit();
}
}
发送端
using UnityEngine;
using System.Collections;
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
public class UDPClient : MonoBehaviour
{
public string recvStr;
public string UDPClientIP = "192.168.6.85";//服务端的IP.自己更改;
string editString = "hello wolrd";
Socket socket;
EndPoint serverEnd;
IPEndPoint ipEnd;
string sendStr;
byte[] recvData = new byte[1024];
byte[] sendData = new byte[1024];
int recvLen = 0;
Thread connectThread;
void Start()
{
Read(path);
UDPClientIP = UDPClientIP.Trim();
//Debug.LogWarning(UDPClientIP);
InitSocket(); //在这里初始化
}
public void Read(string path)
{
StreamReader sr = new StreamReader(path, Encoding.Default);
string line;
//print(line);
for (int i = 0; i < 1; i++)
{
line = sr.ReadLine();
//print(line);
string[] s = line.Split(':');
switch (i)
{
case 0:
UDPClientIP = s[1];
// print(UDPClientIP);
break;
}
}
}
void InitSocket()
{
//Debug.Log(UDPClientIP);
ipEnd = new IPEndPoint(IPAddress.Parse(UDPClientIP), 8888);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
serverEnd = (EndPoint)sender;
print("等待连接");
SocketSend("hello");
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("message from: " + 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();
}
void Update()
{
}
private string path;
private void Awake()
{
path = "C:\\ip.txt";
}
public void ButtonSend(string a)
{
SocketSend(a);
}
public void ButtonDoSomething()
{
ButtonSend("DoSomething");
}
}
我的ip是外部可更改的,不需要的自己注释掉