ISAP/Assets/Scripts/Net/UdpConnect.cs

87 lines
2.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}