記錄C C 程式設計中遇到的一些小問題

2021-08-15 16:37:34 字數 2330 閱讀 7952

比如

char a = \x90;

printf

("%02x"

, a)

;

想輸出為90,沒想到卻是ffffff90,這個問題害我乙個程式老是出錯

最終發現只要改為

unsigned

char a = \x90;

問題就解決了,其實還是正負數的問題

zlib unresolved external symbol _uncompress

inflate_fast崩潰

網上搜了一下,彙編版本的有坑

解決方法是編譯zlib的時候用releasewithoutasm (debug/releasse那裡選擇)

這樣生成的庫是不崩潰的

通訊雙方建立tcp連線後,主動關閉連線的一方會進入time_wait狀態,一直占用埠號。設定socket屬性可讓其立即終止

linux下

struct linger ling =

;setsockopt

(server_sockfd, sol_socket, so_linger,

&ling,

sizeof

(ling)

);

windows下把上面引數都改為0就行了.

對於tcp長連線保活是十分必要的,原因如下:

很多防火牆對一段時間內沒有報文活動的socket會自動關閉。

對於非正常斷開的連線系統並不能偵測到,比如防火牆關閉埠、網線被拔掉、電腦突然奔掉、未關閉應用程式直接關機(服務端無法釋放資源)。(呼叫close(fd)為正常斷開,連線對端可以偵測到)

tcp長連線保持的兩種辦法:

應用層面的心跳機制

自定義心跳訊息頭,一般客戶端主動傳送到服務端,伺服器接收後進行回應(也可以不回應),以便能夠偵測連線是否異常斷開。

tcp協議自帶的保活功能

通過設定tcp keepalive的屬性和傳送底層心跳包的時間間隔。tcp keepalive是在底層定時傳送心跳報文,伺服器端接收到底層的心跳報文直接丟棄,不關心其內容。**如下:

/*****

/*@author super bert 2014-12-16*/

/*socket tcp保持長連線函式*/

int socket_tcp_alive(int socket)

struct tcp_keepalive in_keep_alive = ;

unsigned long ul_in_len = sizeof(struct tcp_keepalive);

struct tcp_keepalive out_keep_alive = ;

unsigned long ul_out_len = sizeof(struct tcp_keepalive);

unsigned long ul_bytes_return = 0;

in_keep_alive.onoff = 1; /*開啟keepalive*/

in_keep_alive.keepaliveinterval = 5000; /*傳送keepalive心跳時間間隔-單位為毫秒*/

in_keep_alive.keepalivetime = 1000; /*多長時間沒有報文開始傳送keepalive心跳包-單位為毫秒*/

ret = wsaioctl(socket, sio_keepalive_vals, (lpvoid)&in_keep_alive, ul_in_len,

(lpvoid)&out_keep_alive, ul_out_len, &ul_bytes_return, null, null);

if (ret == socket_error)

return 0;

}

處理命令列引數的乙個函式

"a:b:cd::e",這就是乙個選項字串。對應到命令列就是-a ,-b ,-c ,-d, -e 。冒號又是什麼呢? 冒號表示引數,乙個冒號就表示這個選項後面必須帶有引數(沒有帶引數會報錯哦),但是這個引數可以和選項連在一起寫,也可以用空格隔開,比如-a123 和-a 123(中間有空格) 都表示123是-a的引數;兩個冒號的就表示這個選項的引數是可選的,即可以有引數,也可以沒有引數,但要注意有引數時,引數與選項之間不能有空格(有空格會報錯的哦),這一點和乙個冒號時是有區別的。

大致處理**如下:

while ((opt = getopt(argc, argv, "+i:o:f:m:t:t:dncb:s:m:x:qv")) > 0)

switch (opt)

}

記錄一些小問題

1 關於mysql replace用法 update biaozhun set province replace province,縣 縣縣 作用 將biaozhun表裡的province欄位中的縣換為縣縣 字串擷取 update biaozhun set province substring in...

SpringMVC遇到的一些小問題

1 空指標 autowired private departmentdao departmentdao 出現該問題主要是忘記新增了 autowired註解 導致departmentdao未注入到employeedao中 從而出現departmentdao中的getdepartment id 方法不能...

c vector 遇到的一些小問題

c vector 遇到的一些小問題 宦傳建 一 在考慮計算vector中元素時需要將string轉換成int c 中語法 string text int i int.parse text 雖說肯定不是這樣,c 相容c,像下面這樣寫還是會報錯 include 注意標頭檔案 int i int text...