87 lines
2.7 KiB
C#
87 lines
2.7 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Net.Sockets;
|
||
using System.Net;
|
||
using System.Threading;
|
||
using UnityEngine;
|
||
using System.Text;
|
||
|
||
public class UdpConnect : MonoBehaviour
|
||
{
|
||
public string editString = "hello wolrd"; //编辑框文字
|
||
//以下默认都是私有的成员
|
||
private Socket socket; //目标socket
|
||
private EndPoint serverEnd; //服务端
|
||
private IPEndPoint ipEnd; //服务端端口
|
||
private string recvStr; //接收的字符串
|
||
private string sendStr; //发送的字符串
|
||
private byte[] recvData = new byte[1024]; //接收的数据,必须为字节
|
||
private byte[] sendData = new byte[1024]; //发送的数据,必须为字节
|
||
private int recvLen; //接收的数据长度
|
||
private Thread connectThread; //连接线程
|
||
|
||
|
||
void InitSocket()
|
||
{
|
||
//定义连接的服务器ip和端口,可以是本机ip,局域网,互联网
|
||
ipEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8999);
|
||
//定义套接字类型,在主线程中定义
|
||
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||
//定义服务端
|
||
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
|
||
serverEnd = (EndPoint)sender;
|
||
print("waiting for sending UDP dgram");
|
||
|
||
//建立初始连接,这句非常重要,第一次连接初始化了serverEnd后面才能收到消息
|
||
SocketSend("hello");
|
||
|
||
//开启一个线程连接,必须的,否则主线程卡死
|
||
connectThread = new Thread(new ThreadStart(SocketReceive));
|
||
connectThread.Start();
|
||
}
|
||
|
||
void SocketSend(string sendStr)
|
||
{
|
||
//清空发送缓存
|
||
sendData = new byte[1024];
|
||
//数据类型转换
|
||
sendData = Encoding.ASCII.GetBytes(sendStr);
|
||
//发送给指定服务端
|
||
socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);
|
||
}
|
||
|
||
void SocketReceive()
|
||
{
|
||
//进入接收循环
|
||
while (true)
|
||
{
|
||
//对data清零
|
||
recvData = new byte[1024];
|
||
//获取客户端,获取服务端端数据,用引用给服务端赋值,实际上服务端已经定义好并不需要赋值
|
||
recvLen = socket.ReceiveFrom(recvData, ref serverEnd);
|
||
print("message from: " + serverEnd.ToString()); //打印服务端信息
|
||
//输出接收到的数据
|
||
recvStr = Encoding.ASCII.GetString(recvData, 0, recvLen);
|
||
print("我是客户端,接收到服务器的数据" + recvStr);
|
||
}
|
||
}
|
||
|
||
void SocketQuit()
|
||
{
|
||
//关闭线程
|
||
if (connectThread != null)
|
||
{
|
||
connectThread.Interrupt();
|
||
connectThread.Abort();
|
||
}
|
||
//最后关闭socket
|
||
if (socket != null)
|
||
socket.Close();
|
||
}
|
||
|
||
private void OnApplicationQuit()
|
||
{
|
||
SocketQuit();
|
||
}
|
||
}
|