Red de conocimiento informático - Problemas con los teléfonos móviles - ¿A qué problemas debería prestar atención al utilizar Socket TCP en ios?

¿A qué problemas debería prestar atención al utilizar Socket TCP en ios?

¿Hay algo especial en el uso de TCP en iOS? ¿Por qué mi escritura funciona en Android y PC?

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>

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.