Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
Вообщем отправляю пакет PROTOCOL_BASE_CONNECT_ACK,а в ответ ничего не приходит
Вот код подключения:
[SRC="csharp"]
/// <param name="ar"></param>
private void AcceptCallback(IAsyncResult ar)
{
Socket sock = null;
try
{
sock = _listeningSocket.EndAccept(ar);
var connection = _connectionsPool.Get();
if (connection == null)
{
log.Info("Connections limit reached! Can't accept new connection");
}
else
{
connection.Socket = sock;
log.Info("New connected");
ServerPacket packet = new Send.PROTOCOL_BASE_CONNECT_ACK();
connection.Socket.BeginSend(packet.WritedData(), 0, packet.WritedData().Length, SocketFlags.None, null, null);
connection.Socket.BeginReceive(connection.WaitPacketLen, 0, 2, SocketFlags.None, ReceivePacketCallback, connection);
}
}
catch (Exception)
{
sock.Close();
}
_listeningSocket.BeginAccept(AcceptCallback, null);
}
[/SRC]
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Содержимое пакета бы видеть. Может опкод не тот или размер.
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
Шлю массив байт для теста
[SRC="csharp"]
writer.Write(new byte[] { 0xA1, 0x00 }); // размер пакета
writer.Write(new byte[] { 0x20, 0x02 }); // опкод
writer.Write(new byte[] { 0x98, 0x84 });
writer.Write(new byte[] { 0x00, 0x00 });
writer.Write(new byte[] { 0x00, 0x00 });
writer.Write(new byte[] { 0x00, 0x00 });
writer.Write(new byte[] {
0x02, 0x0b, 0x00, 0x09, 0x00, 0x85, 0x00, 0x80, 0x00, 0xd3, 0x44, 0x7a, 0x7b, 0x61, 0xa8, 0x67, 0x3c, 0xcc, 0x68, 0x03
, 0xe1, 0xd5, 0x9f, 0x6e, 0xce, 0x92, 0x4e, 0x50, 0x69, 0xcb, 0x41, 0x09, 0x77, 0xbb, 0x6d, 0x92
, 0x20, 0x27, 0xdc, 0x1b, 0x56, 0xaf, 0x3c, 0x24, 0x83, 0x8f, 0xd8 , 0x8d, 0x3e, 0x04, 0x59, 0xf5
, 0xa2, 0x5c, 0x53, 0x55, 0x37, 0x7c, 0x9d, 0xa2, 0xe9, 0x96, 0x69, 0xcd, 0xe1, 0x6b, 0xd6, 0x50
, 0x3a, 0xd2, 0x7c, 0xdd, 0x41, 0xd9, 0x2d, 0x5d, 0x67, 0x0b, 0x5c, 0x3a, 0x96, 0xe5, 0x95, 0x53
, 0x3a, 0x06, 0x08, 0x54, 0xd0, 0x2c, 0x04, 0xf2, 0x98, 0xac, 0x41, 0xb5, 0x52, 0xfe, 0x73, 0x81
, 0xce, 0x0c, 0x53, 0xfb, 0xbc, 0x94, 0x1b, 0xe2, 0xdc, 0x1f, 0xbb, 0xfc, 0x02, 0x68, 0x20, 0x6f
, 0x01, 0xbe, 0xe1, 0xc0, 0x0f, 0x80, 0x60, 0xf1, 0x75, 0x01, 0x69, 0xdd, 0x87, 0x33, 0xd2, 0x1b
, 0x93, 0xdb, 0xda, 0xfc, 0xb0, 0x01, 0x00, 0x11 });
writer.Write(new byte[] { 0x0A});
for (int i = 0; i < 10; i++)
{
writer.Write(new byte[] { 0x01 });
}
[/SRC]
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Данные то хоть передались? Каллбек на BeginSend и посмотрите сколько данных ушло.
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
PROGRAMMATOR Написал:Данные то хоть передались? Каллбек на BeginSend и посмотрите сколько данных ушло.
Ушло 163 байта как и должно быть
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Сложно конечно, когда не видно всего, но вот пример и он работает.
[SRC="csharp"] class TestServer
{
TcpListener server;
/// <summary>
///
/// </summary>
public TestServer()
{
server = new TcpListener(IPAddress.Any, 39190);
server.Start();
server.BeginAcceptTcpClient(BeginAcceptTcpClient, null);
}
/// <summary>
///
/// </summary>
/// <param name="asyncResult"></param>
void BeginAcceptTcpClient(IAsyncResult asyncResult)
{
var client = server.EndAcceptTcpClient(asyncResult);
new TestClient(client);
server.BeginAcceptTcpClient(BeginAcceptTcpClient, null);
}
}
[/SRC]
[SRC="csharp"] class TestClient
{
byte[] buffer = new byte[2048];
NetworkStream stream;
TcpClient client;
public TestClient(TcpClient client)
{
stream = client.GetStream();
// PROTOCOL_BASE_CONNECT_ACK
stream.Write(/****** WRITE DATA HERE *******/);
stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
}
void BeginRead(IAsyncResult asyncResult)
{
int received = stream.EndRead(asyncResult);
log.Info(buffer.toHex());
stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
}
}
[/SRC]
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
Даже с таким кодом не приходит ответ(
[SRC="csharp"]
public class ClientConnection
{
Logger log = Logger.Instance;
byte[] buffer = new byte[2];
NetworkStream stream;
TcpClient client;
public ClientConnection(TcpClient client)
{
stream = client.GetStream();
// PROTOCOL_BASE_CONNECT_ACK
ServerPacket packet = new Send.PROTOCOL_BASE_CONNECT_ACK();
stream.Write(packet.WritedData(), 0 , packet.WritedData().Length);
log.Info("New connected");
stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
}
void BeginRead(IAsyncResult asyncResult)
{
log.Info("[BeginRead] New packet");
var stream = asyncResult.AsyncState as NetworkStream;
int received = stream.EndRead(asyncResult);
log.Info("Lenght = {0}",BitConverter.ToString(buffer));
stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
}
}
[/SRC]
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Всё, вижу. Опкод то не верный, нужен 514, а у вас 544.
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
PROGRAMMATOR Написал:Всё, вижу. Опкод то не верный, нужен 514, а у вас 544.
Да неверный.Изменил на writer.Write(new byte[] { 0x02, 0x02 });,но не помогло.Странно
Сообщений: 77
Тем: 30
Зарегистрирован: Jul 2013
Репутация:
49
Dom2 Написал:Да неверный.Изменил на writer.Write(new byte[] { 0x02, 0x02 });,но не помогло.Странно
Перепроверь структуру пакета
|