中興捧月大賽之經驗教訓總結(上)

2021-06-08 15:24:26 字數 2394 閱讀 1841

參加這個比賽的過程中,自己也摸索和學習了很多新的知識,特別是網路程式設計這塊,以前學得太簡單,這次到了前所未有的學習深度。這裡一併總結一下。

技術要點:

1.c語言實現簡單資料結構。

由於大賽要求必須在c環境下,而且不允許用第三方庫,所以必須在編碼實現方案之前,實現一些可能用到的資料結構,包括雙鏈表,map。

1.1 簡單雙鏈表的實現。

我這裡參考了linux核心中煉表的實現來實現簡單雙鏈表。

鍊錶節點定義:

/*鍊錶節點*/

typedef struct _listnode

listnode;

整數鍊錶節點定義:

/*整數鍊錶節點*/

typedef struct _intnode

intnode;

鍊錶遍歷:

/*遍歷鍊錶。pos為遍歷游標,head為需要遍歷的鍊錶*/

#define for_each(pos,head) \

for(pos=(head)->next;pos!=(head);pos=pos->next) \

/*安全遍歷鍊錶。pos為遍歷游標,n為臨時變數,head為表頭。*/

#define for_each_safe(pos,n,head) \

for(pos=(head)->next;n=pos->next,pos!=(head);pos=n) \

1.2 map的實現。

map其實就是儲存key-value對。我這裡直接在簡單鍊錶的基礎上實現map:簡單鍊錶上每個節點有兩個整數key和value。節點定義:

/*map節點*/

typedef struct _mapnode

mapnode;

2。 日誌模組

在設計方案時,考慮到網路程式設計複雜性,設計了乙個日誌模組輔助開發和除錯。日誌模組的實現很簡單,參考printf函式的實現實現乙個自己的日誌列印函式logprintf:

int logprintf(const char* fmt,...)

else

}

3。快速重新整理控制台

本比賽中沒有設計gui介面,用了乙個cmd終端來做介面。於是遇到了乙個快速高效重新整理控制台的問題,解決辦法很簡單,在用printf函式前將游標定位,這樣可以將需要變化的字元重新整理即可,其他不需要變化的字元,如介面的label,就不需要重新整理,其實就是區域性重新整理的意思啦。

vc下游標定位函式:

void gotoxy(int x,int y)
vc下某處列印字串函式:

void printfstring(int x,int y,int totallen,int type,const char* fmt,...)

4.setsockopt相關

setsockopt(glocalsocket,sol_socket,so_reuseaddr,(const char*)&breuseaddr,sizeof( bool));

收發超時:

//設定接收超時

setsockopt(sock,sol_socket,so_rcvtimeo,(char *)&recvtm,sizeof(int));

recvtm = socket_timeout_ms;

//設定傳送超時

setsockopt(sock,sol_socket,so_sndtimeo,(char *)&recvtm,sizeof(int));

設定阻塞非阻塞:

void setblock(socket sock,int blockflag)

}

非同步連線快速判斷是否可以連線伺服器:

//建立和伺服器的連線

if(connect(sock,(struct sockaddr*)&serveraddress,sizeof(serveraddress)) == socket_error)

while(connectretrycount > 0)

else if(errorcode==0)//連線超時

else

}} else

5。網路錯誤處理

傳送資料時,一般需要處理的錯誤碼是wsaenetreset、wsaeconnreset、wsaeconnaborted、wsaetimedout。

接收資料時,一般需要處理的錯誤碼是wsaeintr(這種情況屬於正常情況)、wsaeconnreset、wsaetimedout、 wsaeconnaborted。

程式設計經驗教訓總結

1 新建的專案工程,其路徑最好不要有中文,避免編譯出錯 2 對於有多個標頭檔案的專案,每個標頭檔案最好使用 ifndef define.endif 以避免重複定義出錯 3 新建結構體 類時一定要記得在結尾處加上封號,不然會報錯 4 對於乙個能正常執行的專案,如果要對其加以修改,最好在動工之前拷貝乙份...

敏捷經驗教訓, 開發總結!

敏捷的過程改進方法 從經驗教訓中學習 敏捷方法開發總結的點評記錄 敏捷的過程改進方法 從經驗教訓中學習 每次去客戶現場做 差距分析或者執行檢查 總是習慣於找他們的缺點,但是每次也總能從客戶那裡發現他們的優點,時間久了,慢慢地對缺陷麻木了,審醜疲勞了,只有發現他們的優點時,我才會精神一振,心情愉快。今...

經驗教訓總結,改進自己

1,多思慎言 不要隨意向人訴說你的不滿,抱怨。要管得住自己的嘴,不該讓別人知道的事情就絕不要說!不要說不自信的話和表現 開會時,如果沒有很好的意見,最好不要發言,說些沒有用的廢話 2,保持積極的心態,隨時接受挑戰,做別人不願做的事情.有機會就要好好把握。3,經常回顧和總結,改進提高自己 對執行不到位...