PDA

Tam Sürümünü Görmek İçin : C++ İle Yazılmış bir programı Vbasic'e çeviri. Syntaxlarda yardım lazım


XLEGAL
07/05/2007, 16:13
ARKADAŞLAR MERHABA,
BAŞLIKTANDA ANLAŞILCAĞI ÜZRE VB CODER'IM.
C++ LA YAZILMIŞ OLAN BİR SOCKET SUNUCU UYGULAMASINI
VB'DE YAZIYORUM. İLETİŞİM PROTOKELLERİNİ DEĞİŞKENLERİ VS
ÇEVİRMEK ZOR OLMADI. ANCAK PROGRAMIN BİRDE PACKET ŞİFRELEME
SİSTEMİ VAR. BUNU ÇÖZMEDE SİZDEN YARDIM BEKLİYORUM.
İSTEĞEN OLURSA TÜM KAYNAK KODLARI YOLLAYABİLİRİM.

1. FONKSİYONUN ÇAĞRILMASI


int LS_VERSION_REQ=1;
int index = 0, send_index = 0, i=0, client_version = 0;
char buff[2048]; memset( buff, 0x00, 2048 );
BYTE command = GetByte( pData, index );

SetByte( buff, LS_VERSION_REQ, send_index );
SetShort( buff, m_pMain->m_nLastVersion, send_index );
Send( buff, send_index );

2. ŞİFRELEMEDE KULLANDIĞI DİĞER FONKSİYONLAR:

inline void SetByte(char* tBuf, BYTE sByte, int& index)
{
*(tBuf+index) = (char)sByte;
index++;
};
inline void SetShort(char* tBuf, int sShort, int& index)
{
short temp = (short)sShort;
CopyMemory( tBuf+index, &temp, 2);
index += 2;
};


SONUÇ: PROGRAMIN KULLANICI TARAFINDAN ALDIĞI ŞİFRELENMİŞ ÇIKTI:

ªU òUª


BU KODLARIN NE YAPTIĞINI ANLAMADAN VBDE YAZAMAM Kİ :garip:


acehreli
07/05/2007, 19:57
memset (kesin): buff adresinden baslayarak 2048 tane 0 yaz

GetByte (kuvvetli tahmin): pData adresinden index kadar otedeki bayti oku

SetByte (kesin; cunku tanimini da gosteriyorsun): buff'in send_index otesine LS_VERSION_REQ yaz. Yani buff+send_index adresindeki baytin degerini 1 yap

SetShort (kesin; cunku tanimini da gosteriyorsun): SetByte gibi, ama bayt yerine short yaz ve LS_VERSION_REQ yerine m_pMain->m_nLastVersion'nin degerini yaz. (Anlasilan orada short iki bayt uzunlugunda.)

Send (tahmin): buff'tan baslayarak send_index'e kadar olan butun baytlari gonder

Set islemlerinin bir yan etkisi de var: Ne kadar yaziyorlarsa, send_index'in degerini de o kadar arttiriyorlar. SetBayt 1 arttiriyor, SetShort 2... En sonunda send_index'in degeri gidecek olan pakedin uzunlugu olmus oluyor.

Ali

XLEGAL
08/05/2007, 12:33
1)
m_pMain->m_nLastVersion
yukarıdaki iki değişkenin arasındaki operator ne işe yarıyor?

2) Aşağıdaki veri türleri sakladığı bilgi bakımından ne gibi farklılıklara sahip?
char / char*
int / int&

Ayrıca bazı fonksiyonlarda gönderilen verilerin başlangıclarınada bu operatorlar eklenmiş
* = değişkenin string dizisi olduğunumu belirtir?
& = değişkenn integer sayı olduğunu mu belirtiyor?

acehreli
09/05/2007, 20:24
Hmmm... Cok temel sorular. :) Acaba bu isi kod uzerinden halletmek yerine protokolleri mi incelesen?

1) -> isleci, soldaki isaretcinin gosterdigi nesnenin sagdaki ogesine erismek icin kullanilir. O ornekte, m_pMain, bir isaretci. Isaret ettigi tUrUn m_nLastVersion diye bir ogesi var.

m_pMain->m_nLastVersion, o nesnenin o ogesinin degeri anlamina gelir.

2) char: 1 bayt'lik veri
char*: char gosteren isaretci
int: Genellikle bilgisayarin en dogal veri tipidir (ornegin 32-bit) ve genellikle 4 bayttir
int*: int gosteren isaretci

3) *, gonderilenin bir isaretci oldugunu soyler:

void foo(int * p); // i bir int isaretcisidir

&, gonderilenin bir referans oldugunu soyler:

void foo(int & r); // r bir int'e referanstir

*'in string olmasi gerekmez; &'in da int olmasi gerekmez. Oncesindeki tUr onemlidir.

Ali