You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Pero ahora porque en vez de buffer.Addrange no está escrito buffer.Add? Porque con Addrange hay que agregar normalmente dos posiciones cosa que no puedo apreciar en el código.
El prototipo de Add() es:
public void Add(
T item
)El prototipo de AddRange() es:
public void AddRange(
IEnumerable<T> collection
)se utiliza AddRange() porque es la forma de agregar elementos de una colección en lugar de agregar uno por uno dichos elementos.
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Pero ahora que sentido tiene esto?
buffer.AddRange(new byte[] {
0,//Null 1byte
});
Déjenme saber si lo entendí bien: al final de la lista se crea un vector que contiene un elemento, a saber, 0?
Lo que hace AddRange() es añadir "cada elemento" de una colección al final de otra. No se agrega un vector, se agrega cada elemento del vector.
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
con que propósito?
En el "Ares Chat Protocol - Ares 2.1.7.3041" todos los mensajes tienen 3 bytes al principio y el resto es diferente a cada protocolo:
2 bytes -> data length
1 byte -> proto id
x bytes -> data
"data" son los bytes del protocolo. Veamos el formato del protocolo para el login:
Proto ID: MSG_CHAT_CLIENT_LOGIN (2)
Direction: client to server
Function: login handshake packet when first joining a room
16 bytes -> guid
2 bytes -> file count
1 byte -> null
2 bytes -> data port
4 bytes -> node ip address
2 bytes -> node port
4 bytes -> null * 4
x bytes -> user name
1 byte -> null
x bytes -> client version
1 byte -> null
4 bytes -> local ip address
4 bytes -> external ip address
1 byte -> client features
1 byte -> current uploads
1 byte -> maximum uploads allowed
1 byte -> current queued users
1 byte -> user age
1 byte -> user gender
1 byte -> user country code
x bytes -> user location
1 byte -> null
Vemos que al final el protocolo especifica que se requiere un byte "null". Comunmente un byte null se entiende como un byte con todos los bits a cero.
Una instancia de tipo byte con valor 0 en C# es una forma de crear este byte null.
Saludos

