|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.04.2018, 19:05 | #1 |
Пользователь
Регистрация: 10.03.2016
Сообщений: 12
|
не получается понять логики данного форитрования сетевого пакета
есть фрагмент кода на си но я сейчас пишу клиент на 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); } |
13.04.2018, 19:08 | #2 |
Пользователь
Регистрация: 10.03.2016
Сообщений: 12
|
вот код клиента на 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(); } } } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Здравствуйте Ребята и Девушки надо установить лоравель на опенсервер у самой не получается какаято ошибка мне понять | nadegda1 | Помощь студентам | 0 | 03.07.2016 17:15 |
Паскаль: Помогите понять основу для написания простейшей программы. Не могу понять суть. | romanya | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 18.03.2016 20:35 |
алгебра логики | LiR1Ka | Помощь студентам | 3 | 07.06.2011 22:37 |
алгебра логики | вредина123 | Помощь студентам | 0 | 12.12.2010 19:08 |
Не получается отсортировать структуру. В чем проблема понять никак не могу | AlEnanechker | Помощь студентам | 1 | 25.12.2009 17:02 |