problemy z buforem

0

Zrobilem prosty komunikator w projekcie do szkoly.
Dziala on na zasadzie:

dalem dwa gniazdka (TServerSocket i TClientSocket)

przy wcisnieciu buttona 'wyslij' wpisuje:

client1.Socket.SendText(wpisz.Text);
a w zdarzeniu servera-OnClientRead wpisalem:
box.Items.Add(socket.ReceiveText);
wyslane wiadomosci pojawiaja sie w listboxie (box)
wszystko dziala ok
ale teraz chce zrobic drugi przycisk ktory bedzie wysylal 'paczki' informacji
jak zrobic jakis bufor?
zrobilem tablice idx: array[1..10] of string;
w zdarzenie servera OnClientRead wstawilem: idx[1]:=(Server.Socket.ReceiveText);-nie wiem czy tak mozna
program sie sypie

jak zrobic taki bufor w ktorym po odebraniu paczki np 20 elementow
bede mogl sprawdzac jego zawartosc i w zaleznosci od niej przesylac dane dalej

chodzi mi o taki efekt ze np wysle slowo 'ala' i wiem ze po otrzymaniu tego slowa kolejne trzy elementy to np data urodzin ali (to tylko przyklad), a po otrzymaniu elementu 'ola' kolejne 3 beda data urodzin Oli

0

witam
stworz tablice z danymi np tablica:array [0..10] of string[100], pozniej wez w clientscoket sendbuf(tablica,sizeoftablica); w serwerze wez tez taka tablice i w onread receivebuf(tablica,sizeof(tablica)) i korzystasz tablicy

0

możesz to zrobić za pomocą implode i explode. obie metody na torrym ;)

0

Wysyłaj pierw długość reszty pakietu aby ten co odbiera wiedział ile jeszcze tego jest .. wtedy nie trzeba żadnych array of string.

0

ok gogo ale nigdy tego nie uzywalem wiec rposze o dokladniejsze wprowadzenie
zrobilem tak:
zadeklarowalem 2 tablice:

idx:array [0..2] of string;
bufx : array[0..2] of string;

bufx[0]:='$10';
bufx[1]:=wpisz.Text;
bufx[2]:='koniec';
po stronie clienta mam:

for i:=0 to 2 do
client1.Socket.SendBuf(bufx[i],3);
client2.Socket.SendBuf(bufx[i],3);

po stronie servera w OnRead:

for i:=0 to 2 do
server.Socket.Connections[0].ReceiveBuf(idx[i],3);

w client1.host mam ip mojego komputera w client2 drugiego
wysylam bufx'a (przykladowe dane) na dwa komputery
client1 odbiera ok a client2 nie

a moze robie jakis blad w obsludze nadawania/odbiru
czy petlami odbiera sie i nadaje czy moze inaczej?

0
taurus81 napisał(a)

po stronie servera w OnRead:

for i:=0 to 2 do
server.Socket.Connections[0].ReceiveBuf(idx[i],3);

to może zobacz co masz w idx...

0

no wlasnie na komputerze z ktorego wysylam w idx jest to co powinno byc ale na drugim w momencie odbioru wyskakuje blad: Access violation at adress 0040473B in module 'PROJECT1.EXE'. Read of address 00951E0C; Czy wie ktos o co chodzi?
Bo ja jestem poczatkujacy raczej. z gory dzieki za pomoc

0

próbowałeś kodu, który jest w http://4programmers.net/Delphi/Artyku%C5%82y/Gniazda w przesyłanie plików ???

0

ten kod jest praktycznie taki jak moj
ale zrobilem od nowa projekt na tej samej zasadzie i jest prawie ok
zmienilem tylko tablice na bufx:array[0..2] of char;

jestem prawie pewny ze blad jest gdzies w tej procedurze:

for i:=0 to 2 do begin
server.Socket.Connections[0].ReceiveBuf(bufx[i],3);

na komputerze z ktorego wysylam odbieram w 100% poprawne dane, ale na drugim ucieka jeden element-> wysylam bufx[0]='a'; bufx[1]='b'; bufx[2]='c'; a odbieram:
bufx[0]='b'; bufx[1]='c'; bufx[2]='';

nie wiem czy petla for jest dobrym rozwiazaniem na odbior
jak zrobic jakis warunek ktory wykryje pojawienie sie nowego przesylanego elementu? moze jakies if socket.receiveBuf=cos tam then?
jak zrobic zeby nie gubil danych podczas transmisji?

0

ok udalo mi sie zrobic samemu:
po stronie clienta:

bufx[0]:='a';
bufx[1]:='b';
bufx[2]:='c';
repeat
client.Socket.SendBuf(bufx[i],3);
client2.Socket.SendBuf(bufx[i],3);
inc(i);
until i<3;

po stronie servera:

repeat
server.Socket.Connections[0].ReceiveBuf(bufx[j],3);
inc(j);
until j<3;

w onCreate formularza wpisuje i:=0; j:=0;

tylko dlaczego na petli sie gubil?...

dodatkowa zmiana to tablica nie jest string tylko char
à propos to jak sie konwertuje ze stringa na char'a?
jak mam teraz wyslac cos takiego:
bufx[2]:=Edit1.text; jesli bufx jest char'em a Edit stringiem?

0

...i WIELKIE DZIEKI dla wszystkich ktorzy pomogli przebrnac mi przez ten pewnie blahy dla Was problem (nie mam obeznania w programowaniu-znam tylko czesc podstaw a musze napisac ten projekt bo mnie z uczelni wyleja)

1 użytkowników online, w tym zalogowanych: 0, gości: 1