Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
ничего не приходит после PROTOCOL_BASE_CONNECT_ACK
#1
Вообщем отправляю пакет 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]
Ответ
#2
Содержимое пакета бы видеть. Может опкод не тот или размер.
Ответ
#3
Шлю массив байт для теста
[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]
Ответ
#4
Данные то хоть передались? Каллбек на BeginSend и посмотрите сколько данных ушло.
Ответ
#5
PROGRAMMATOR Написал:Данные то хоть передались? Каллбек на BeginSend и посмотрите сколько данных ушло.

Ушло 163 байта как и должно быть
Ответ
#6
Сложно конечно, когда не видно всего, но вот пример и он работает.

[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]
Ответ
#7
Даже с таким кодом не приходит ответ(
[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]
Ответ
#8
Всё, вижу. Опкод то не верный, нужен 514, а у вас 544.
Ответ
#9
PROGRAMMATOR Написал:Всё, вижу. Опкод то не верный, нужен 514, а у вас 544.

Да неверный.Изменил на writer.Write(new byte[] { 0x02, 0x02 });,но не помогло.СтранноSad
Ответ
#10
Dom2 Написал:Да неверный.Изменил на writer.Write(new byte[] { 0x02, 0x02 });,но не помогло.СтранноSad

Перепроверь структуру пакета
Бложик - https://foxovsky.ru
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  После перезахода сервер отказываеться видить клиент slawa560 6 2,441 08-08-2017, 11:26 PM
Последний пост: slawa560
  После покупки предмета 0 часов slawa560 1 1,659 08-06-2017, 12:15 AM
Последний пост: PROGRAMMATOR
  PROTOCOL_BASE_CONNECT_ACK Boris2105 1 1,882 05-17-2016, 03:29 PM
Последний пост: PROGRAMMATOR
  PROTOCOL_BASE_CONNECT_ACK Sojang 12 3,571 01-21-2016, 12:15 PM
Последний пост: PROGRAMMATOR

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)