[問題] 如何在buffer裡得到自己想要的資料

看板C_and_CPP作者 (梅)時間13年前 (2011/07/20 01:04), 編輯推噓3(3010)
留言13則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我想要寫一個client向server傳一筆資料 該資料由使用者輸入(所以不確定資料大小) 現今我在client端和server端都宣告一個char buf[256] client: write(sockfd,buf,strlen(buf)) server: read(sockfd,buf,256); 我這樣子寫,面臨就是server端接收到的buf變數裡面, 會有我無法預期的資料,想請問該如何只得到自己想要的資料呢? 其他那些雜七雜八的亂數我不要。 煩請解惑謝謝> . < 餵入的資料(Input): 例如使用者輸入一段:hello world!!! server會收到:hello world!!!dhfaifjdfkiojfikjv,@#*%)#$)@$(lfh8er 79387492403984018499-0597014980830283kwoqkdlojko... 像這樣子的結果。 預期的正確結果(Expected Output): 使用者輸入:hello world!!! server端只收到:hello world!!! 錯誤結果(Wrong Output): 多出很多無意義亂數填滿buf 請大家幫忙解惑(>.<) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.118.153 ※ 編輯: loblve 來自: 163.25.118.153 (07/20 01:06)

07/20 01:07, , 1F
client端寫 write(socket, buf, strlen(buf)+1)); 試試
07/20 01:07, 1F

07/20 01:15, , 2F
初始化buf 並在最後加上字串結數字元?!
07/20 01:15, 2F

07/20 01:18, , 3F
假如沒辦法在接收端有自動句尾結束的話, 就自己加tag判
07/20 01:18, 3F

07/20 01:18, , 4F
斷吧.
07/20 01:18, 4F

07/20 02:56, , 5F
bzero( buf, 256 )?
07/20 02:56, 5F

07/20 11:34, , 6F
這必須要有確定的size, 封包會夾帶一些有的沒的訊息
07/20 11:34, 6F

07/20 11:42, , 7F
樓上的說法好怪
07/20 11:42, 7F

07/20 19:32, , 8F
要先想想你怎麼知道那些是你要的那些是亂碼...
07/20 19:32, 8F

07/20 19:32, , 9F
知道的話就可以用過濾的方式找了
07/20 19:32, 9F

07/20 20:37, , 10F
那要怎麼實作呢? 如何知道要從哪裡開始濾掉
07/20 20:37, 10F

07/20 20:45, , 11F
你有試過我在一樓的推文了嗎?
07/20 20:45, 11F

07/22 00:47, , 12F
hello world!!! 屁股+ '\0'
07/22 00:47, 12F

07/22 01:29, , 13F
write( socket, buf, sizeof(buf))?
07/22 01:29, 13F
文章代碼(AID): #1E9Raa31 (C_and_CPP)