Read-Funktion in der Netzwerk-Programmierung in C
Ich diesen code verwenden für das Lesen von socket :
int n ;
char buffer[256];
n = read(newsockfd, buffer, 255);
if (n < 0)
{
error("ERROR reading from socket");
}
wenn die Daten, die gelesen werden müssen, die größer als 255 byte (z.B. 1000), die Veränderung aufgetreten ?
Ich weiß, ändern char buffer[1000]
, ich brauche andere Lösung .
- Ich denke, die richtigen Codes hängt davon ab, wie Sie möchten, um eingehende Daten verarbeitet werden, wie für den Umgang mit Signalen, wie socket-timeouts und ist
newsockfd
im blockierenden oder nicht blockierenden Modus?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gerade gelesen, mehrmals aus der Steckdose, bis Sie alle Daten, die Sie erhalten möchten.
Z.B. zur Aufnahme von 1000 bytes, es könnte so Aussehen (auf Erfolg
read
gibt die Anzahl der bytes, die gelesen):buffer
in jeder iteration hängt davon ab, wie Sie Bearbeiten möchten, weiter, was Sie empfangen.Etwas wie:
char pBuf = buffer;
solltechar *pBuf = buffer;
oder ich glaube nicht, es wäre sogar kompilieren.Haben Sie überprüft, errno? http://linux.die.net/man/2/read
Wenn Sie weitere Daten benötigen, verwenden Sie eine Schleife, nicht?
Wirkt sich eine änderung der Dritte parameter der read-1000 arbeiten oder nicht? also
Wenn die
read
Funktion nicht annehmen, eine Zahl, die groß ist, können Sie Lesen Sie ihn mehrere Male. In der Schleife, das nachzugehen, wie viel Zeichen ein, die Sie bisher gelesen haben und verwendenread(newsockfd, buffer+m, 1000-m);
Hinzufügen, um die oben genannten Lösungen, können Sie auch Lesen Sie eine beliebige Anzahl von bytes (vorausgesetzt, Sie nicht eine Idee haben, die vorher, wie viele Bytes erwarten Sie, dass der versandt in die Steckdose) durch Zuweisung von etwas mehr Arbeitsspeicher, um die Puffer, in denen Sie Lesen, wenn Sie den maximalen Grenzwert erreichen der gleiche.