[英]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)。 關於代碼的一些注意事項:
read(2)
。 首先,它可能是-1
,即錯誤,所以你必須檢查errno(3)
; 第二,你可能會讀到你期望的不到4個字節。 nBytes == 0
是EOF
情況,意味着另一方關閉了連接。 memset()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.