參加這個比賽的過程中,自己也摸索和學習了很多新的知識,特別是網路程式設計這塊,以前學得太簡單,這次到了前所未有的學習深度。這裡一併總結一下。
技術要點:
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,經常回顧和總結,改進提高自己 對執行不到位...