Unity UDP 전면 및 후면 통신 코드
5409 단어 아리운(서버)
서버:
using UnityEngine;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System;
public class UDP_server : MonoBehaviour
{
public string ipAddress = "127.0.0.1";
public int ConnectPort = 8060;
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.Parse(ipAddress), ConnectPort);
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)
{
try
{
sendData = new byte[1024];
sendData = Encoding.UTF8.GetBytes(sendStr);
socket.SendTo(sendData, sendData.Length, SocketFlags.None, clientEnd);
}catch(Exception e)
{
Debug.Log(e.ToString());
}
}
//
void SocketReceive()
{
//while (true)
//{
// recvData = new byte[1024];
// recvLen = socket.ReceiveFrom(recvData, ref clientEnd);
// recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);
// Debug.Log(" " + recvStr);
//}
while (true)
{
recvData = new byte[1024];
try
{
recvLen = socket.ReceiveFrom(recvData, ref clientEnd);
}
catch (Exception e)
{
}
print(" : " + clientEnd.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();
Debug.LogWarning(" ");
}
// Use this for initialization
void Start()
{
InitSocket(); // server
}
int i = 0;
///
/// Update is called every frame, if the MonoBehaviour is enabled.
///
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
++i;
SocketSend(" :" + i);
}
}
void OnApplicationQuit()
{
SocketQuit();
}
}
클라이언트:
using UnityEngine;
using System.Collections;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
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;
void Start()
{
UDPClientIP = "127.0.0.1";// IP.
UDPClientIP = UDPClientIP.Trim();
InitSocket();
}
void InitSocket()
{
ipEnd = new IPEndPoint(IPAddress.Parse(UDPClientIP), 8060);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
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()
{
if (Input.GetKeyDown(KeyCode.Space))
{
++i;
SocketSend(" :" + i);
}
}
}