作者 主題: linux 用c寫socket  (閱讀 2790 次)

0 會員 與 1 訪客 正在閱讀本文。

zelda

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
linux 用c寫socket
« 於: 2012-12-07 02:09 »
我在centos 6.3下寫了一個測試socket程式
發現一個不解的事情,片段的程式如下:
char *buffer;
buffer = ( char* ) malloc( sizeof( char ) *200 ) ;
clientSock = accept( mysock, (struct sockaddr*)&client, &addrsize );
recv( clientSock, buffer, sizeof( buffer ), 0 );
char sendstring[] = "hello";
send(clientSock, sendstring, sizeof(sendstring), 0);
printf( "%s", buffer );

然後在windows下寫client,發送一個字元陣列
如果陣列有'\n'換行字元
server端才會顯示
否則沒有顯示
但client有收到server送出的字串而顯示出
所以看起來不像卡在接收
如果下一次有送出'\n'字元,則會連之前沒有顯示的一併出現
到底是為什麼會這樣?是linux的socket規定嗎?
要收到'\n',才會從buffer取出?

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5384
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: linux 用c寫socket
« 回覆 #1 於: 2012-12-07 10:20 »
每個 function 都有回傳碼, 為什麼不去檢查結果而要用猜的?
如果是要印出收到什麼, 為什麼是放在送出之後才印?

如果要我猜你所說的情形的原因... 是因為你用 printf() 顯示, 而這函式, 除非去呼叫 fflush(), 否則本來就是要有換行才會處理.  自然會有你說的情形. 這與 socket 完全沒關係.

zelda

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
Re: linux 用c寫socket
« 回覆 #2 於: 2012-12-28 01:09 »
每個 function 都有回傳碼, 為什麼不去檢查結果而要用猜的?
如果是要印出收到什麼, 為什麼是放在送出之後才印?

如果要我猜你所說的情形的原因... 是因為你用 printf() 顯示, 而這函式, 除非去呼叫 fflush(), 否則本來就是要有換行才會處理.  自然會有你說的情形. 這與 socket 完全沒關係.
以前都沒有注意到緩衝的問題,原來呼叫ffulsh()或者加換行符號就可以了
受教了