Comunicação Síncrona via Socket no Unity

Para implementar uma comunicação síncrona entre um cliente Unity e um servidor usando sockets TCP, configure primeiro a interface do usuário no Unity. Crie dois botões na interface UGUI, um para conectar ao servidor e outro para anviar mensaegns, vinculando-os a funções específicas. Adicione um campo de entrada (InputField) para digitar a mensagem a ser enviada e um componente de texto (Text) para exibir as respostas do servidor.

Exemplo de código para o cliente Unity:

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

public class ClienteUnity : MonoBehaviour
{
    private Socket socketConexao;
    public InputField campoEntrada;
    public Text textoExibicao;

    public void ConectarAoServidor()
    {
        socketConexao = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socketConexao.Connect("127.0.0.1", 10086);
    }

    public void TransmitirMensagem()
    {
        string mensagemParaServidor = campoEntrada.text;
        byte[] dadosEnvio = System.Text.Encoding.UTF8.GetBytes(mensagemParaServidor);
        socketConexao.Send(dadosEnvio);

        byte[] bufferReceber = new byte[1024];
        int bytesRecebidos = socketConexao.Receive(bufferReceber);
        string mensagemDoServidor = System.Text.Encoding.UTF8.GetString(bufferReceber, 0, bytesRecebidos);
        textoExibicao.text = mensagemDoServidor;

        socketConexao.Close();
    }
}

Para o servidor, utilize uma aplicação .NET (como WPF no Visual Studio) para gerenciar a comunicação. Crie uma interface simples com controles para exibir logs e iniciar o servidor. O código abaixo demonstra a implementação básica do servidor, que recebe uma mensagem do cliente e a ecoa de volta.

Exemplo de código para o servidor:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace ServidorSocketExemplo
{
    public static class GerenciadorServidor
    {
        public static string logMensagens = "";

        public static void IniciarServico()
        {
            Socket socketPrincipal = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress enderecoIp = IPAddress.Parse("127.0.0.1");
            IPEndPoint pontoFinal = new IPEndPoint(enderecoIp, 10086);
            socketPrincipal.Bind(pontoFinal);
            socketPrincipal.Listen(10);
            logMensagens += "Servidor ativo e aguardando conexões.\n";

            Socket socketCliente = socketPrincipal.Accept();
            byte[] bufferEntrada = new byte[1024];
            int quantidadeBytes = socketCliente.Receive(bufferEntrada);
            string mensagemRecebida = Encoding.UTF8.GetString(bufferEntrada, 0, quantidadeBytes);
            logMensagens += $"Mensagem recebida: {mensagemRecebida}\n";

            byte[] bufferSaida = Encoding.UTF8.GetBytes(mensagemRecebida);
            socketCliente.Send(bufferSaida);

            socketCliente.Close();
            socketPrincipal.Close();
        }
    }
}

Este exemplo ilustra uma comunicação síncrona ponto a ponto, onde o cliente envia uma mensagem e aguarda a resposta do servidor antes de prosseguir. Lembre-se de tratar exceções de rede em ambientes de produção para garantir robustez.

Tags: Unity socket TCP sincronia rede

Publicado em 6-6 04:13 por Thomas