¿A qué problemas debería prestar atención al utilizar Socket TCP en ios?
CDR. _client es un campo estático LOSocket de clase pública
{
//El tipo de puerto de socket que se puede crear
Enumeración pública LOSocketType
{
Cliente = 0,
Servidor = 1,
}
# constructor de cancelación de región
Losoke Privado()
{
}
#ÁreaEnd
#Area-Pública* * *Código
//Obtenga diferentes tipos de puertos a través de métodos estáticos.
LOSocket estático público GetSocket (tipo LOSocket. LOSocketType)
{
Socket LOSocket = null
Conmutador (tipo){ p>
p>
caso LOSocketType. Cliente:
{
//Crear un nuevo cliente.
socket = new LOSocket();
Romper;
}
}
Retornar socket;
}
#Región final
#Región-Código de pieza del cliente
Socket de cliente de socket privado
/ /Después Al recibir el mensaje devuelto por el servidor, el cliente declara una función delegada de devolución de llamada.
Cliente de devolución de llamada de recepción privadaReceiveCallBack;
//Se utiliza para almacenar datos de mensajes devueltos por el servidor.
byte[] Buffer =nuevo byte[1024];
//Inicializar información del socket del cliente
public void InitClient(cadena ip, puerto int, ReceiverCallBack ccb )
{
this.clientreceivecallback = CCB;
this.clientSocket = new Socket(AddressFamily.Internet, SocketType.Stream, tipo de protocolo.TCP);
Dirección IP dirección = Dirección IP. Parse(IP);
IPEndPoint ep = nuevo IPEndPoint(dirección, puerto);
este socket de cliente . (!Socket de cliente. Conectado){
//cdr.exception = "La conexión se ha desconectado";
//debug.log("La conexión se ha desconectado" " );
// }
//Comienza a esperar de forma asincrónica para recibir mensajes del servidor.
este . socket de cliente. comienza a recibir (Buffer, 0, Buffer. Longitud, SocketFlags. Ninguno, nuevo sistema. devolución de llamada asíncrona (ReceiveFromServer), este . socket de cliente);
//Función de devolución de llamada después de recibir el mensaje devuelto por el servidor.
void ReceiverFromServer(system.IAsyncResult ar)
{
//Obtiene el objeto de socket en funcionamiento actual.
Trabajador de enchufe = ar.
AsyncState como socket;
int ByteRead = 0;
Intenta {
//El número de bytes después de recibir el mensaje.
ByteRead = trabajador. EndReceive(ar);
Depurar. log("-"+ByteRead);
} catch(system.Exception ex) {
CDR.exception = exToString()+" buhuodyichang ";
// this.clientReceiveCallBack(eg.ToString());
}
if(ByteRead>0) {
Contenido de cadena = codificación. UTF8.GetString (Buffer, 0, ByteRead);
//Devuelve el mensaje a la persona que llama a través de la función de devolución de llamada.
Depurar. Log("Content:"+Content);
this.clientReceiveCallBack(Content);
}
//Continuar esperando de forma asíncrona hasta que el servidor regrese mensajes.
Trabajadores. BeginReceive (Buffer, 0, Buffer. Longitud, SocketFlags. Ninguno, nuevo sistema. devolución de llamada asíncrona (ReceiveFromServer), trabajador);
}
// El cliente envía mensajes activamente.
SendMessage público nulo(mensaje de cadena)
{
if(message == null)
Return;
cdr . cs+= " FaSongData "+mensaje+" \ n ";
Depurar. log(mensaje);
mensaje+= "\r\n";
byte[] sendData = codificación. UTF8 . GetBytes(message);
//Enviar solicitud de mensaje de forma asincrónica
Socket del cliente. BeginSend (sendData, 0, sendData. Longitud, SocketFlags. Ninguno, nuevo sistema. AsyncCallback (SendToServer), socket del cliente
}
// Enviar la función de devolución de llamada al final); del mensaje.
void SendToServer(system.IAsyncResult ar)
{
socket trabajador = ar. AsyncState como socket
Trabajador. EndSend(ar);
cdr . ishearthbeat = 0;
}
#End area
El siguiente es el envío y la recepción. del código de cliente.