網路資訊接受不全問題

2021-04-12 12:22:30 字數 3016 閱讀 9041

前記:

記得以前在某公司的時候,經常被教導要如何學會小結,現在倒好,不知道是因為什麼?這種方法又被忘卻了,有十足的理由說自己是個白痴,在某公司我學到了很多,做人的道理,以及如何對待人生,以及怎樣如何更加好地工作。其中讓我戀戀不忘的還是明確做乙個軟體工程師的職責:

1 寫**

2 寫文件

3 做支援

9個字,言簡意賅,寫**工夫是程式設計師不能忽視的一項本領,從程式設計的第一天起就明白了乙個道理:程式設計 = 程式設計師,於是使勁地寫程式,一些是自己寫的,**行其小的,有些也上千行,寫完之後總要誇耀一翻。後來明白 程式設計 ~ 程式設計師,因為大學裡老師們正準備教老師如何寫文件,有了文件,老師們便能輕鬆地理會學生的課程設計情況。

文件變得重要了!,在面試視源的時候,我就被稱有良好的文件而被錄用的,當時我的經理很讚賞地認同了,

在某公司,文件佔了很重要的位置,記得文件分門別類,主要有三種:軟體進度報告,軟體版本更新說明,軟體重大bug記錄以及修改過程。當時我在實習,沒有寫多少document。主要是看一些東西,適應一些環境。

在某公司,做支援是分為若干部分的,部門內部之間的支援,(這一般是同事之間的切磋),部門之間的支援(包括選配器材等),部門之外的支援(外派其它公司做技術援助)。這個支援是很繁雜和辛苦的。

主題:

問題被概述為 「伺服器資訊不全問題」

在這裡有乙個網路程式,包括服務端和客戶端,在客戶端接受的資訊有時不全,有時丟掉前面一部分,有時丟掉後面一部分,而且丟失資料不等,更加可惡的是,都在每隔若干條客戶端指令輸入之後發生這種資訊丟失。

當時頭叫我去research這件事情,我當時嚇呆了。開始將一些資訊丟失歸結為網路方面的原因,以及一些硬體支援方面的原因,這樣的話,卻沒有仔細分析了這種資訊丟失的真正原因。

在後來,採用了檔案的形式存放使用者傳送過來的資訊的方法:

int size;

size = strlen((char *)(m_recvbuf));//獲得訊息字元的長度

file* fp;

fp = fopen("jolley.txt","a");

if(!fp) return ;

fwrite(m_recvbuf, nrecv, 1, fp);

fprintf(fp,"error:%dcount:%d/n/n+++++++++++++++++++++++++++++++++++++++++++++++/n/n", getlasterror(), nrecv);

fwrite((char*)(m_recvbuf+2),size*sizeof(char),1,fp);

fwrite("/r/n", 3, 1, fp);

fclose(fp);

在這裡資訊被儲存在jolley.txt檔案裡面了。於是可以在這個檔案裡面查詢到所要的資訊,檔案儲存的資訊參差不齊,完整的資訊有nrecv應該為504,但是在資訊不全的情況可能發生在資訊接受開始,也可以在資訊接受開始。並且 上條資訊的沒有接受完整的話,那麼在接下來的時候會繼續接受來達到504這個完整的資訊。當時頭告訴我,不是伺服器的原因,而是客戶端接受的問題,伺服器已經將資訊完整地傳送過來了,而客戶端則接受的時候出現了斷層的現象,這樣的話,即將斷層的資訊合併就可以了。

當時想到了乙個問題:如果將剩下的資訊在receive一次呢?會到達這種效果吧?於是有了下面的**:

int recvlen =0;

if(recvlen +nresult

後來採用

buffer

以及pointer

(用來記錄拷貝了多少資料)也採用將當前資訊拷貝到

buffer

中去,並且從

pointer

接下來的位置處進行接受剩下的資訊。

**是:

char buffer[1000];//

設定替換緩衝區。

memset(buffer,0,1000);//

緩衝區初始化

int pointer =0;//

下標,獲得資料大小

if(pointer>0)

memcpy(m_recvbuf,buffer,pointer);//

將接受來的資料拷貝回去

nrecv = receive(m_recvbuf+pointer,recv_buf_size-pointer-1);//

從接下來的位置接受資訊

nrecv+=pointer;//

修改接受的首席資訊官度

int nbufleft=0;

int nindex=0;

int len;

while(nbufleft > 0)

else

nindex +=len;游標指向下一條指令

nbufleft -= len;

}終於ok了。

後記:從這裡說明了幾點:

1 在從伺服器接受資訊的時候並不是你想多receive幾次就能夠多接受幾次的,必須要有網路事件進行觸發,如果你想要receive的話,除非有網路事件進行觸發,這樣才能接受。

2 資訊不全等於伺服器傳送不全+客戶端接受不全+網路事件+else,如果出現這種情況,那麼就會這樣去想,做個txt去記錄伺服器傳送來的資訊,分析一下,如果資訊均小於正常時的數目,並且有上下條資訊存在明顯分隔的話,這樣可能是伺服器傳送的資訊不全了(可能有網路事情),如果上下條資訊存在明顯上下條資訊能成為一條完整資訊的話,那麼有可能就是客戶端出現了情況(不排除網路事件的干預)。

3 在分析問題的時候可以借助一些有利的工具,例如乙個簡單的txt就幫助了很多。在vc中還有很多這樣的小技巧,比如乙個afxmessagebox既可以將某些資訊以messagebox的形式顯示出來,又可以來track down程式的執行流程,比如在一段程式中設定一組afxmessagebox,如果程式執行完畢的話,那麼這幾個afxmessagebox都會被執行,否則將會在其中的某個afxmessagebox中出現問題,這樣的話就顯然易見地detect錯誤了。

4 掌握工具不等於清楚流程,在掌握vc這門工具的同時,也應該加強vc業務以及公司業務workflow的學習,知道怎麼做,而不能等著頭告訴你怎麼做,只是完成一些實現。這樣的程式設計師被成為machine。而不是wise的human。

5 主動,細心,客觀,換位思考。

接受資訊的態度

接受資訊的態度 田海立 2005 12 15 把一位婦女從懷孕到分娩的全過程錄製下來,拿到課堂上放給某大學醫學院的學生看,看後問學生們感受如何,結果以性別分出了兩種觀點。女生看後說,印象很深刻,很受教育,獲得了很多新知識 男生的觀點卻是,這些都是生理課上講過的內容,沒什麼新意,還不如自己看書呢。相同...

接受資訊的態度

接受資訊的態度 田海立 2005 12 15 把一位婦女從懷孕到分娩的全過程錄製下來,拿到課堂上放給某大學醫學院的學生看,看後問學生們感受如何,結果以性別分出了兩種觀點。女生看後說,印象很深刻,很受教育,獲得了很多新知識 男生的觀點卻是,這些都是生理課上講過的內容,沒什麼新意,還不如自己看書呢。相同...

解決匯出表不全問題

今天在做遷移資料庫,從11.2.0.1遷移到11.2.0.4,用exp匯出乙個使用者下所有的物件,在做imp匯入的時候發現表少了很多,看日誌後分析是部分空表沒有匯出。在網上查了一下,發現是11g中新特性,當表無資料時,不分配segment,以節省空間。而使用exp命令時,無segment的表不會被匯...