Моя проблема описана следующим образом:
Мой C#
клиент отправляет пакет udp, используя sendto
.Поскольку это C#
, это байтовый массив, который я построил.
Сервер C
получает пакет, используя recvfrom
.Через wireshark я подтвердил, что программа C#
отправляет пакет и что программа C
получает его.recvfrom
не выдает никаких ошибок.Но я не могу извлечь какие-либо данные из полученного пакета.Я получаю его в массиве символов.
Конкретные детали: отправляемый мною пакет UDP
является запросом.И программа c
, и программа C#
знают о структуре запроса.Но так как я посылаю массив байтов по проводам, эта структура не имеет значения (я думаю).
Код: C#
: Создание пакета: ``
byte[] tmpB;
int j = 0;
char[] reqStr = rsField.reqStr;
for (; j < reqStr.Length; j++)
{
tmpB = BitConverter.GetBytes((char)reqStr[j]);
for (int ctr = 0; ctr < tmpB.Length; ctr++)
retVal[i++] = tmpB[ctr];
}//end of for
tmpB = BitConverter.GetBytes((UInt32)rsField.fieldLength);
for (int ctr = 0; ctr < tmpB.Length; ctr++)
retVal[i++] = tmpB[ctr];
tmpB = BitConverter.GetBytes((UInt32)rsField.fieldType);
for (int ctr = 0; ctr < tmpB.Length; ctr++)
retVal[i++] = tmpB[ctr];
//------------------------------------------------------------
tmpB = BitConverter.GetBytes((UInt32)ctField.camType);
for (int ctr = 0; ctr < tmpB.Length; ctr++)
retVal[i++] = tmpB[ctr];
tmpB = BitConverter.GetBytes((UInt32)ctField.fieldLength);
for (int ctr = 0; ctr < tmpB.Length; ctr++)
retVal[i++] = tmpB[ctr];
tmpB = BitConverter.GetBytes((UInt32)ctField.fieldType);
for (int ctr = 0; ctr < tmpB.Length; ctr++)
retVal[i++] = tmpB[ctr];
... `` Как видите, у меня есть смесь строковых и числовых полей.(Это не единственные поля, которые у меня есть, код закорочен для удобства чтения)
C
: ``
char buf[1000];
memset(&buf,'\0',sizeof(buf));
length = recvfrom (i, &buf, sizeof(buf), 0,
(struct sockaddr *)&remoteAddr, &fromLen);
now = time(0);
if (length == -1) {
fprintf (stderr, "%s: recvfrom error - %m\n", ctime(&now));
continue;
}
unsigned long fieldType1 = strtoul(bufPtr,0,10);
bufPtr += 4 * sizeof(char);
unsigned long fieldLength1 = strtoul(bufPtr,0,10);
bufPtr += 4 * sizeof(char);
unsigned long res = strtoul(bufPtr,0,10);
printf("fieldType: %ld \t fieldLength: %ld \t res: %ld \t \n",fieldType1,fieldLength1,res);
... `` Я убежден, что мне не хватаетфундаментальный аспект во всем этом.Пожалуйста, помогите мне узнать, что это такое.Буду признателен за любую помощь.
Спасибо.