客戶端寫入
void T_echo_write(struct bufferevent *bev,void *ctx)
{
struct evbuffer *output = bufferevent_get_output(bev);
evbuffer_drain(output,sizeof(output));
if(tempnum == 1) //之前服務端發送了一個驗證,我使得tempnum為1時開始發送檔案資料,檔案fp已經在前面打開
{
if(!feof(fp))
{
memset(sendbuff,0,sizeof(sendbuff));
fgets(filebuff,SIZE,fp);
strcpy_s(sendbuff,filebuff);
printf("T_Sendbuff:%s",sendbuff);
evbuffer_add(output,sendbuff,strlen(sendbuff));
len = evbuffer_get_length(output);
printf("evbuffer output length:%d\n",len);
}
else
{
memset(sendbuff,0,1034);
strcpy(sendbuff,"5,close file!");
evbuffer_add(output,sendbuff,strlen(sendbuff));
printf("%s success!\n",sendbuff);
evbuffer_freeze(output,0);
fclose(fp);
}
}
}
服務端在read回呼里面做出如下操作,也就是取得evbuffer中input的資料
struct evbuffer *output = bufferevent_get_output(bev);
struct evbuffer *input = bufferevent_get_input(bev);
//evbuffer_expand(input,1024*2);
//將輸入緩沖區SIZE位元組的資料移除到receivebuff
if(evbuffer_remove(input,receivebuff,SIZE) < 0)
{
printf("Evbuffer_remove error!\n");
}
else
{
size = size + 1;
printf("evbuffer_remove success!\n");
}
len = strlen(receivebuff);
printf("receivebuff len:%d\n",len);
printf("size1 = %d\n",size);
//evbuffer_remove(input,receivebuff,SIZE);
////決議從緩沖區得到的資料
printf("receivebuff:%s|\n",receivebuff);
uj5u.com熱心網友回復:
這是代碼,多年不搞了轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128987.html
標籤:網絡通信
