Unity简单实现TCP/IP中的客户端功能

Unity简单实现TCP/IP中的客户端功能

前言

在上篇博客中,我介绍了下使用Unity简单实现TCP/IP的服务端的功能,今天在这篇博客中我介绍下实现客户端的功能,具体实现方法如下所示。

实现步骤

1.新建项目,在场景中新建一个InputField和一个Button,用于给服务端发送数据,如下图所示:
Unity简单实现TCP/IP中的客户端功能_第1张图片
2.新建SocketClient.cs脚本,用于实现TCP/IP的客户端功能,具体代码如下所示:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;

public class SocketClient : MonoBehaviour
{
    int _port = 6000;
    string _ip = "127.0.0.1";

    public InputField input;

    Thread c_thread;

    void Start()
    {
        StartClient();
    }

    // Use this for initialization
    public void StartClient()
    {
        bt_connect_Click();
    }

    public void SendMsg()
    {
        bt_send_Click(input.text);
    }

    Socket socketSend;
    private void bt_connect_Click()
    {
        try
        {
            //创建客户端Socket,获得远程ip和端口号
            socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress ip = IPAddress.Parse(_ip);
            IPEndPoint point = new IPEndPoint(ip, _port);

            socketSend.Connect(point);
            Debug.Log("连接成功!");
            //开启新的线程,不停的接收服务器发来的消息
            c_thread = new Thread(Received);
            c_thread.IsBackground = true;
            c_thread.Start();
        }
        catch (Exception)
        {
            Debug.Log("IP或者端口号错误...");
        }

    }

    /// 
    /// 接收服务端返回的消息
    /// 
    void Received()
    {
        while (true)
        {
            try
            {
                byte[] buffer = new byte[1024 * 1024 * 3];
                //实际接收到的有效字节数
                int len = socketSend.Receive(buffer);
                if (len == 0)
                {
                    break;
                }
                string str = Encoding.UTF8.GetString(buffer, 0, len);
                Debug.Log("客户端打印:" + socketSend.RemoteEndPoint + ":" + str);
            }
            catch { }
        }
    }

    /// 
    /// 向服务器发送消息
    /// 
    /// 
    /// 
    private void bt_send_Click(string str)
    {
        try
        {
            string msg = str;
            byte[] buffer = new byte[1024 * 1024 * 3];
            buffer = Encoding.UTF8.GetBytes(msg);
            socketSend.Send(buffer);
        }
        catch { }
    }

    public void SocketQuit()
    {
        //关闭线程
        if (c_thread != null)
        {
            c_thread.Interrupt();
            c_thread.Abort();
        }
        //最后关闭服务器
        if (socketSend != null)
            socketSend.Close();
        print("diconnect");
    }
    void OnApplicationQuit()
    {
        //退出时关闭连接
        SocketQuit();
    }
}

3.将SocketClient.cs脚本挂载到场景中的物体上,并且将InputField赋值到该脚本上,如下图所示:
Unity简单实现TCP/IP中的客户端功能_第2张图片
4.将SocketClient.cs的发送数据的方法赋值到场景中的按钮上,如下图所示:
Unity简单实现TCP/IP中的客户端功能_第3张图片
5.打开网络助手,建立一个TCP服务端,配置如下图所示:
Unity简单实现TCP/IP中的客户端功能_第4张图片
6.运行网络助手与客户端,使用客户端发送数据,发现网络助手已经接收到了数据,如下图所示:

相关链接

项目Demo

你可能感兴趣的:(Unity网络)