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.