簡體   English   中英

我怎樣才能更好地閱讀我的插座?

[英]How can I better read my socket?

每次循環時它都會卡住。 它坐着等待閱讀,但從未讀過任何東西,因為,好吧......沒有什么可讀的了。

這是讀取功能:

int  readSocket(int sockfd, char* buffer) {

    FILE* file;
    file = fopen("logfile.txt","a+");

    char code[5];

    while(1) {

        int nBytes = read(sockfd, buffer, MY_BUFFER_SIZE);
        fprintf(file,"S->C: %s",buffer);

        strncpy(code, buffer,4); 
        code[4]='\0';



            if (nBytes == 0) break;

        memset(buffer, 0, MY_BUFFER_SIZE);

    }
    fclose(file);
    return codeParser(atoi(code));
}

這就是所謂的:

while (1) {
    serverCode = readSocket(sockfd, mybuffer);
    if (serverCode == 221) break;

    fflush (stdout);
    buffer = fgets (mybuffer, 1024, stdin); 

    writeSocket(sockfd, mybuffer);
}

有什么建議么?

TCP套接字是雙向流。 它不知道您的消息邊界。 您需要在TCP之上使用自己的協議來計算單獨的消息。 三種常見方法是:

  • 固定長度的消息,
  • 嵌入固定長度郵件頭的郵件長度,
  • 顯式消息分隔符,例如換行符,或\\0x1等等(謝謝,@ cdf)。

編輯0:

關於代碼的一些注意事項:

  1. 始終檢查系統調用的返回值,如read(2) 首先,它可能是-1 ,即錯誤,所以你必須檢查errno(3) ; 第二,你可能會讀到你期望的不到4個字節。
  2. nBytes == 0EOF情況,意味着另一方關閉了連接。
  3. 你不需要memset()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM