PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : daten uebertragen



rosenstolz
19-12-2002, 20:40
Hallo,

ich hab mir in C einen einfachen server und clienten erstellt.
damit habe ich versucht daten (arrays) zu übertragen.

1.ich versuche 400000Bytes zu übertragen. mit hilfe einer schleife speichere ich immer 400bytes in einem array welches ich mit send übertrage,das ganze 1000 mal. beim clienten läufts umgekehrt ich speichere die mit recv empfangenen 400bytes in einem array welches ich dann immer wieder in einen 400000byte großen block schreibe.

das ganze funktioniert meisstens ganz gut, jedoch gelegentlich kommt es vor das weniger übertragen wird, als ob einige "pakete" von 400bytes nicht ankommen. ist das normal oder muss ich in der anwendung die übertragung selbst noch einmal ueberpruefen ?

diese stückelung in 400bytes hab ich vorgenommen da eh nur blöcke bis 1448bytes ankommen, ist das richtig ??

wie macht ihr das wenn ihr groeßere datenmengen/speicherbloecke uebertragen wollt?

hier noch der code,


server:

for(ctr1=0;ctr1<ANZ;ctr1+=PAKET_GR)
{
for(ctr2=0;ctr2<PAKET_GR;ctr2++)
send_block[ctr2]=block[ctr2+ctr1];

if((send_size=send(*remote_sock, send_block, PAKET_GR*sizeof(int),0))==-1)
{
printf("Error: send\n");
exit(-1);
}
size+=send_size;
}


client:

for(ctr1=0;ctr1<ANZ;ctr1+=PAKET_GR)
{
if((recv_size=recv(sock, recv_block, PAKET_GR*sizeof(int),0))==-1)
{
printf("Error: recv\n");
exit(-1);
}
size+=recv_size;

for(ctr2=0;ctr2<PAKET_GR;ctr2++)
block[ctr2+ctr1]=recv_block[ctr2];
}


danke

wünsch euch ein frohes fest und nen guten rutsch,
martin

BLUESCREEN3D
19-12-2002, 22:54
nur mal so eine Frage: Wie sind denn die beiden Rechner verbunden? Netzwerk? Kannte die Befehle send und recv nicht...

rosenstolz
25-12-2002, 12:19
die beiden rechner sínd über eine ethernet-verbindung mit einander verbunden.

hat jemand erfahrung mit dem verändern der MTU bzw. wie ich die maximale MTU einer verbindung ermitteln kann ?

BLUESCREEN3D
25-12-2002, 16:17
Nimm doch erstmal den minimalen Wert bis es richtig funktioniert

The Ripper
25-12-2002, 20:41
Bei Ethernet ist die MTU 1500 Bytes.
Wers nicht weiss, dem hilft ifconfig:


eth0 ...
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...

anda_skoa
26-12-2002, 17:50
Du scheint den Rückgabewert von send nicht zu benutzen.
Wenn das kleiner als der Block ist, mußt du die verbliebenen Daten im nächsten Block drinnen haben.

Ciao,
_