Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 13.04.2018, 20:05   #1
konderson97
Пользователь
 
Регистрация: 10.03.2016
Сообщений: 12
Репутация: 10
По умолчанию не получается понять логики данного форитрования сетевого пакета

есть фрагмент кода на си но я сейчас пишу клиент на java который должен отправлять пакет с командами данный код и формирует эти пакеты только я не могу понять его чтобы переписать на java
от пример кода на C. Чтобы было понятно как сформировать запрос.Также есть документация о командах

typedef struct

{

BYTEaddr;

BYTEcmd;

WORDlen;

void*buf;

}IVLPACKET;

//---*********************************** *********************************** ********

// converts two byte 14 bit integer value to 16 bit code to send via protocol

USHORT Set14to16(USHORT n) { return (((n&0xFF80)<<2) | 0x0100) | (((n&0x007F)<<1) | 0x0001);}

//---*********************************** *********************************** ********

// reverse converion, two byte 16 bit code to 14 bit integer value

USHORT Set16to14(USHORT n) { return (((n&0xFC00)>>2) | ((n&0x00FE)>>1)); }

//---*********************************** *********************************** ********

/*

CheckSumCalc calculates checkSum

*/

USHORT CheckSumCalc(BYTE *buf, DWORD len)

{

USHORT s = 0;

for(DWORD i = 0; i < len; i++)

s += buf[i];

return Set14to16(s);

}

//---*********************************** *********************************** ********

/*

ConvSend fills the *buf according to the content in *pac structure

maxlen is the size of the buf. Used to avoid buf overfull

returns the length of filled data

*/

long ConvSend(BYTE *buf, IVLPACKET *pac, long maxlen)

{

if(maxlen < pac->len + 4 + (pac->len + 6)/7 + 2)

return 0;

USHORT n; // 16 bit unsigned integer

int bi;

buf[0] = ((pac->addr & 0x7F)<<1);

buf[1] = ((pac->cmd & 0x7F)<<1) | 1;

n = Set14to16(pac->len);

buf[2] = n&0xFF;

buf[3] = n>>8;

bi = 4+pac->len;

if(pac->buf && pac->len)

{

memcpy(buf+4, pac->buf, pac->len);

memset(buf+bi, 1, (pac->len + 6)/7);

for(USHORT i = 0; i < pac->len; i++)

if(!(buf[4+i]&1))

{

buf[4+i] |= 1;

buf[bi+i/7] |= 1<<((i%7) + 1);

}

bi += (pac->len + 6)/7;

}

n = CheckSumCalc(buf, bi);

buf[bi] = n&0xFF;

buf[bi + 1] = n>>8;

return (bi+2);

}
Вложения
Тип файла: doc Протокол обмена WiFi rev2.doc (316.0 Кб, 0 просмотров)
konderson97 вне форума   Ответить с цитированием
Старый 13.04.2018, 20:08   #2
konderson97
Пользователь
 
Регистрация: 10.03.2016
Сообщений: 12
Репутация: 10
По умолчанию

вот код клиента на java .но пока данные в byte array не правельные

import java.net.*;
import java.io.*;

public class Client {
public static void main(String[] ar) {
int serverPort = 5050; // здесь обязательно нужно указать порт к которому привязывается сервер.
String address = "192.168.1.15"; // это IP-адрес компьютера, где исполняется наша серверная программа.

// Здесь указан адрес того самого компьютера где будет исполняться и клиент.

try {
Socket socket = new Socket(address, serverPort) ;

OutputStream os = socket.getOutputStream();
//String str="hello";
DataOutputStream out1=new DataOutputStream(os);

byte[] mas = {0b00000000,0b00000101,0b00000001,0 b00000001,0b00000011,0b00000001,0b0 0001011};

os.write( mas );
// out1.writeUTF(str);
InputStream in = socket.getInputStream();

int r;

while( (r = in.read()) >= 0 )
System.out.printf( "%02X ", r );


}
catch (Exception x) {
x.printStackTrace();
}
}
}
konderson97 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Здравствуйте Ребята и Девушки надо установить лоравель на опенсервер у самой не получается какаято ошибка мне понять nadegda1 Помощь студентам 0 03.07.2016 18:15
Паскаль: Помогите понять основу для написания простейшей программы. Не могу понять суть. romanya Паскаль 2 18.03.2016 21:35
алгебра логики LiR1Ka Помощь студентам 3 07.06.2011 22:37
алгебра логики вредина123 Помощь студентам 0 12.12.2010 20:08
Не получается отсортировать структуру. В чем проблема понять никак не могу AlEnanechker Помощь студентам 1 25.12.2009 18:02


20:12.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru