unity Socket 通信

在这里插入图片描述

unity 端

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using System.Net;
using System;
using System.Text;
public class mClinet : MonoBehaviour
{

    private Socket socket;


    private byte[] buffer= new byte[1024];
   
    void Start()
    {
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socket.Connect("127.0.0.1", 6666);// 链接服务器

        StartReceive();

        Send();
    }

    /// <summary>
    /// 接收消息
    /// </summary>
    void StartReceive()
    {
        socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, null);
    }
    /// <summary>
    /// 接收到的消息
    /// </summary>
    /// <param name="asyncResult"></param>
    void ReceiveCallback(IAsyncResult asyncResult)
    {
        //消息长度
        int len = socket.EndReceive(asyncResult);
        //解析
        // 如果有意端断开 len 就会是0 
        if (len <= 0) return;
        //将buffer 转成字符串
        string str = Encoding.UTF8.GetString(buffer, 0, len);
        Debug.Log(str);
        //再次接受
        StartReceive();
    }

    void Send() {
        socket.Send(Encoding.UTF8.GetBytes("服务器 你好! 我是客户端"));
    
    }
}

vs控制台应用 服务器端

using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
namespace mServer
{
    class Program
    {
        /// <summary>
        /// Socket 服务器
        /// </summary>
        private static Socket socket;
        private static byte[] buffer = new byte[1024];
        static void Main(string[] args)
        {
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //绑定
            socket.Bind(new IPEndPoint(IPAddress.Any, 6666));
            //同一个时间多少个客户端
            socket.Listen(20);

            StartAccept();
           

            Console.WriteLine("服务器启动成功 等待客户端链接!");
            while (true)
            {
                Console.Read();
            }
            
        }

        /// <summary>
        /// 应答
        /// </summary>
        private static void StartAccept()
        {
            socket.BeginAccept(AcceptCallback, null);
        }
        /// <summary>
        /// 接受消息
        /// </summary>
        /// <param name="client"></param>
        private static void StartReceive(Socket client)
        { 
            client.BeginReceive(buffer,0,buffer.Length,SocketFlags.None, ReceiveCallback,client);
           
        }

        /// <summary>
        /// 接收回调
        /// </summary>
        /// <param name="ar"></param>
        private static void ReceiveCallback(IAsyncResult ar)
        {
            Socket client = (Socket)ar.AsyncState;
            int len = client.EndReceive(ar);
            if (len <= 0) return;
            string str = Encoding.UTF8.GetString(buffer,0,len);
            Console.WriteLine(str);
            client.Send(Encoding.UTF8.GetBytes("你好客户端   我是服务器 "));
            StartReceive(client);
        }
        /// <summary>
        /// 应答回调
        /// </summary>
        /// <param name="ar"></param>
        private static void AcceptCallback(IAsyncResult ar)
        {
            //客户端
            Socket client =   socket.EndAccept(ar);
            client.Send(Encoding.UTF8.GetBytes("服务器启动成功  "));
            StartReceive(client);


            StartAccept();
        }
    }
}