Yup, setuju.
Satu2nya cara yg. benar emang dengan cara pembufferan di client, trus
dari stream yg. diterima, dicari batas2 recordnya.
Cuman, btw, program di bawah ada bugnya tuh. Gimana kalau line-nya
nggak diterima lengkap? Gimana kalau dipindah idx=0 dari for() ke
sebelum while(1)?
jagad wrote:
>
> Process send(...) seperti diatas belum tentu dikirm dalam 3 packet, disisi
> penerima bisa jadi cuman perlu satu kali recv(...).
> Tetapi karena hal tersebut tidak bisa dijadikan pegangan maka buffering
> disisi penerima memang sebuah keharusan. Kalau anda mengirimkan data dalam
> betuk 'Formatted Text' (misal; ASCII, HTML, dll) maka anda bisa melakukan
> buffering dan text parsing dengan mencari karakter CR-LF atau LF sebagai
> tanda satu line text telah diterima.
> Berikut ini saya coba berikan contoh pseudo-code:
>
> char* buff;
> char* bline;
> buff = malloc(BUFF_SIZE+1);
> bline=malloc(MAX_LINESIZE);
> *(buff + BUFF_SIZE) = 0x0;
>
> while (1){
> nlen = recv(sockfd, buff, BUFF_SIZE);
> if (nlen = SOCKET_ERROR) break;
>
> for (i=0, idx=0; i < nlen; i++, idx++){
> *(bline+idx) = *(buff+i);
> if (*(buff+i) =
> {
> *(bline+idx+1) = 0x0;
> doprocessline(bline);
> idx = 0;
> }
> }
> }
>
> Semoga bisa membantu.
>
> Jagad.
>
--
cheers,
Bennylp
--
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3