udp 통신
6537 단어 unity_udp 통신
void Start()
{
InitNet();
}
Thread myThread;
public void InitNet()
{
IAsyncResult result = null;
result = InitUdpNet();
if (result == null)
return;
bool success = result.AsyncWaitHandle.WaitOne(5000, true);
if (!success)
{
//
NetClosed();
Debug.Log("connect Time Out Net will reconnect");
InitNet();
}
else
{
// socket , 。
// worldpackage = new List<JFPackage.WorldPackage>();
myThread = new Thread(new ThreadStart(ReceiveSorket));
myThread.IsBackground = true;
myThread.Start();
}
}
private void ReceiveSorket()
{
while (true)
{
byte[] data = new byte[1024];
//
recv = newsock.ReceiveFrom(data, ref Remote);
Debug.Log(Encoding.Unicode.GetString(data, 0, recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);
}
}
private IAsyncResult InitUdpNet()
{
// IP
IPEndPoint sender = new IPEndPoint(IPAddress.Any, port);
newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//
newsock.Bind(sender);
Remote = (EndPoint)(sender);
IAsyncResult result = newsock.BeginConnect(Remote, new AsyncCallback(connectCallback), newsock);
return result;
}
private void connectCallback(IAsyncResult asyncConnect)
{
Debug.LogError("connectSuccess");
}
int recv;
Socket newsock;
EndPoint Remote;
int port = 8001;
string stringData;
//
public void SendUdpBroadcasts()
{
//Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint sender = new IPEndPoint(IPAddress.Broadcast, port);
EndPoint Remote = (EndPoint)sender;
newsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);// scoket
string request = " ,TEST SEND!";//
byte[] buffer = Encoding.Unicode.GetBytes(request);
newsock.SendTo(buffer, Remote);
}
public void SendUdp(string str)
{
byte[] data = new byte[1024];
data = Encoding.Unicode.GetBytes(str);
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
}
// Socket
public void NetClosed()
{
// Debuger.LogError("NetClosed");
if (newsock != null)
{
if (newsock.Connected)
{
newsock.Shutdown(SocketShutdown.Both);
newsock.Close();
}
}
newsock = null;
}
void OnDestroy()
{
NetClosed();
}
클라이언트:
// Use this for initialization
void Start()
{
InitNet();
}
// Update is called once per frame
void Update()
{
}
Socket server;
EndPoint Remote;
string input, stringData;
public void InitNet()
{
// IP
byte[] data = new byte[1024];
Debug.Log("This is a Client, host name is {0}"+ Dns.GetHostName());
// IP, TCP
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.0.131"), 8001);
// , UDP
server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
server.Bind(ipep);
string welcome = "Hello! ";
data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
Remote = (EndPoint)sender;
data = new byte[1024];
// IP , ,
//server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 100);
recv = server.ReceiveFrom(data, ref Remote);
Debug.Log("Message received from {0}: "+ Remote.ToString());
Debug.Log(Encoding.ASCII.GetString(data, 0, recv));
myThread = new Thread(new ThreadStart(ReceiveSorket));
myThread.IsBackground = true;
myThread.Start();
}
Thread myThread;
int recv;
IPEndPoint remote;
//
private void ReceiveSorket()
{
while (true)
{
// server.SendTo(Encoding.ASCII.GetBytes(" "), Remote);
byte[] data = new byte[1024];
recv = server.ReceiveFrom(data, ref Remote);
stringData = Encoding.Unicode.GetString(data);
Debug.Log(stringData);
}
}
//
public void SendUdp()
{
server.SendTo(Encoding.Unicode.GetBytes(" "), Remote);
}
// Socket
public void NetClosed()
{
// Debuger.LogError("NetClosed");
if (server != null)
{
server.Close();
}
server = null;
}
void OnDestroy()
{
NetClosed();
}