當前位置:首頁 » 雲伺服器 » 如何截取伺服器返回碼

如何截取伺服器返回碼

發布時間: 2023-01-22 16:57:47

⑴ 在jsp頁面怎麼獲取伺服器返回的狀態碼

java"><%=response.getStatus()%>

${response.getStatus()}

⑵ 如何偵伺服器的tcp返回數據

在平時的開發中,經常會碰到一些需要檢測tcp連接是否正常的場景。比如一個分布式的應用,一個調度任務的節點管理一堆用來跑業務的節點。當調度節點進行調度的時候,需要把任務分發給它認為正常的業務節點去執行。業務節點是否正常,一個重要的參考依據就是調度節點和業務節點之間的tcp連接是否正常。這時候就需要調度節點主動地去檢測tcp連接。常見的檢測方法有以下幾種

方案一、通過TCP協議的返回值進行判斷

<1> 利用select,把socket設置為非阻塞。然後使用select等待該socket的可讀事件。如果socket可讀,但是recv的返回值是0,則說明socket已經被對端斷開,這時候就可以調用close關閉socket。這里還要注意一點,recv還可能返回負數,這個代表socket操作出錯。但是仍然應該判斷一下errno是否為EINTR。如果errno是EINTR,則說明recv函數是被信號中斷返回的,這時候不能判斷socket的連接是否正常,也不應該調用close關閉socket。

<2> 利用poll的事件。poll本身提供了POLLHUP,POLLERR, POLLNVAL三個事件。如果文件描述符是socket,則POLLHUP代表socket已經斷開了連接,在TCP底層就是已經收到了FIN報文。POLLERR表示socket出現了錯誤,一般情況下是收到了rst報文,或者已經發送了rst報文。這兩種情況都應該調用close關閉socket。POLLNVAL代表socket沒有打開,這時不能使用close關閉它,而應該根據自己的業務做一些其他的操作。因為關閉一個未打開的socket會出錯。

這兩種方法都可以很精確地判斷tcp連接是否正常,但是仍然有很明顯的缺陷。就是它只可以根據TCP操作的返回值來進行判斷。如果TCP四次握手沒有正常被執行呢?比如連接對端機器直接掛了,那麼就不會發送FIN報文給這一端,select不會返回socket可讀,poll不會返回socket異常。那麼這個死鏈接將會永遠檢測不到。直到寫這個socket的時候,對端直接返回一個ret報文,這時才知道這個連接已經斷掉了。這就意味著tcp連接異常可能永遠檢測不到,或者檢測到的延遲非常大。這對於一些資源寶貴而且要求高性能的伺服器是不能接受的,比如游戲伺服器,比如搜索伺服器。方案二、在第一種方案的基礎上設置socket的 keep alive 機制

方案一的主要缺陷在於檢測不及時,或者根本檢測不到。TCP協議提供了keep alive機制。如果開啟了這個特性(暫時稱開啟了keep alive的一端為開啟端),在默認情況下,開啟的著一端的socket相關結構中會維護一個定時器,默認是2小時。如果在2小時內兩端沒有數據往來,那麼開啟端就會給另一端發送一個ack空報文。這時候分幾種情況:

<1> 對端機器可達,而且TCP相關組件運行正常。那麼對端就會給開啟端發送一個ack空報文。這時開啟端就知道對端是正常的,意味著tcp連接也沒有問題。開啟端會重新初始化定時器,等待下一個超時的到來。需要注意的是,如果兩端之間有數據往來,定時器也會被重新初始化為2個小時。

<2> 對端掛了,或者正在重啟,還沒有完全起來。或者對端伺服器不可達。 這種狀態的對端是不會響應這個ack的。開啟端的 keep alive 機制會把這種情況當探測超時來處理,並且重新發送ack到對端。當超時次數超過一定限制,keep alive 就認為這個tcp連接有問題。典型值是每次75秒,超時9次。

<3> 對端掛過,但是已經重啟完成。這時候發送這個ack和寫已經關閉的socket是一種情況,對端會返回一個rst報文,這樣開啟端就知道tcp連接出問題了。

可以看出 keep alive 機制彌補了方案一種不能判斷沒有進行正常四次揮手連接出現問題的缺陷。默認的發送超時和發送間隔都是可以調整的。

tcp_keepalive_time: KeepAlive的空閑時長,默認是2小時

tcp_keepalive_intvl: KeepAlive探測包的發送間隔,默認是75s

tcp_keepalive_probes: 在tcp_keepalive_time之後,沒有接收到對方確認,繼續發送保活探測包次數,默認是9次

這3個參數使用 setsockopt函數都是可以配置的。

方案二看似已經完美了,能夠比較精確而且及時地發現有問題的連接。但是還有2個缺點。第一個是 keep alive 機制看似牛逼,但是很多人不建議使用。因為上面說的3個參數很難根據業務場景給出合適的值,設置不好很容易對tcp連接狀態發生誤判,關閉了一個本來正常的連接。而且沒有一個主動通知應用層的方式。比如socket連接出錯了,TCP協議接到了rst,fin,或者keep alive判斷出socket有問題了,但是並不會主動去通知應用層,必須我們自己 recv socket或者等待錯誤事件才能得到這個錯誤。第二個是很多場景下,keep alive 檢測仍然不夠及時,比如對端掛了,最長需要等待 tcp_keepalive_intvl * tcp_keepalive_probes時間才可以檢測出來,而且這兩個值還不能設置得太小,太小了容易誤判。

方案三、應用層的心跳

這種形式的心跳設計就比較多樣化了,而且靈活,可以很好地適應業務場景。唯一的缺點就是要自己寫代碼。我目前接觸到的就是定期進行RPC調用。看RPC調用是否正常,如果返回錯誤或者拋出異常,就說明連接有問題。

⑶ 如何使用Retrofit獲取伺服器返回來的JSON字元串

如何使用Retrofit獲取伺服器返回來的JSON字元串
以下是我們在Api介面中的定義方法

//以前我們使用我們定義好的POJO或javabean類作為callback的泛型,以便Retrofit幫我們解析
@POST("/interface/xxxxxx")
void getCouponList(Callback<Coupon> reponse);

//但如果我們想獲得JSON字元串,Callback的泛型里就不能寫POJO類了,要寫Response(retrofit.client包下)
@POST("/interface/xxxxxx")
void getCouponList(Callback<Response> reponse);

那麼在我們請求介面的時候,只需簡單一行代碼,就能拿到伺服器返回的JSON字元串了

ZhixueApiUtil.getInstance().getZhixueApi().getCouponList(new Callback<Response>() {
@Override
public void success(Response response, Response response1) {
//注意這里用第一個Response參數的
String jsonString = new String(((TypedByteArray) response.getBody()).getBytes());

//再使用Retrofit自帶的JSON解析(或者別的什麼)
Coupon coupon = new Gson().fromJson(jsonString, Coupon.class);
......
}

@Override
public void failure(RetrofitError error) {
......
}
});

至此,我們就能拿到JSON字元串了,在需要的時候可以用這種辦法。

⑷ chttpfile->sendrequest get如何獲取伺服器返回

CString strSentence, strWriteName="1.htm"; CString strFileName="http://localhost/InDesign/" + strWriteName; CInternetSession sess; CHttpFile* fileGet; try { fileGet=(CHttpFile*)sess.OpenURL(strFileName); } catch(CException* e) { fileGet = 0; throw; } if(fileGet) { DWORD dwStatus; DWORD dwBuffLen = sizeof(dwStatus); BOOL bSuccess = fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen); if( bSuccess && dwStatus>= 200&& dwStatus<300 ) { CStdioFile fileWrite; if(fileWrite.Open(strWriteName, CFile::modeWrite|CFile::modeCreate)) { while(fileGet->ReadString(strSentence)) { fileWrite.WriteString(strSentence+"\n"); } fileWrite.Close(); AfxMessageBox("下載完畢"); } else { AfxMessageBox("本地文件"+strWriteName+"打開出錯."); } } else { strSentence.Format("打開網頁文件出錯,錯誤碼:%d", dwStatus); AfxMessageBox(strSentence); } fileGet->Close(); delete fileGet; } else AfxMessageBox("不能找到網頁文件!"); sess.Close();

⑸ 網路中如何截取數據包修改後返回伺服器

截取數據包可以仿照sniffer的方法,將把網卡置於混雜模式(Raw Socket)的方法,然後抓包,分析……
另外你的網路流量監控系統是監控鏈路還是監控節點,監控節點的話直接訪問注冊表就可以了(windows),如果是監控整個網路環境的話可參考icmp協議的使用。

⑹ 如何從FTP伺服器返回信息中將IP和埠號提取出來

無知一點,處理這符串
不過似乎有點什麼類port,你查一下

⑺ 易語言客戶端發送數據給伺服器,伺服器返回的信息怎麼去返回提取,比如伺服器返回152,0,1,0,0,19,0,0,152

發送的是位元組集,取回數據()也是返回位元組集啊,也就是位元組型數組{152,0,1,0,0,19,0,0,152}.如果發送的是文本那可以這樣
編輯框1.內容=到文本(客戶1.取回數據())

⑻ 如何使用fiddler截取自己要測試的網址

方法/步驟

1、進行打開電腦中已經安裝好的fiddler的軟體工具,進入到界面中之後,進行點擊右邊的位置中的「composer」的選項。

2、進入到了composer 的選項之後,在parsed中進行根據http發送進行選擇請求,這里是http的協議的get請求,進行選擇為get。

3、使用網路一下鏈接地址,把鏈接地址復制到地址欄的輸入框的位置中。

4、然後進行點擊execute的按鈕進行發送http的協議請求操作。

5、在fiddler的位置中可抓取的http協議發送的伺服器返回的操作的內容。進行雙擊抓取的http鏈接。

6、需要查看伺服器返回內容,進行點擊textview可以查看具體內容信息。

⑼ javascript截取伺服器返回信息

簡單的說下流程吧

一般都是ajax請求,在onerror函數里處理下,或這在onsuccess函數中判斷下響應的狀態碼,如5xx系列就是服務內部錯誤,這時你就可以按你的想法向做什麼就做什麼了。

⑽ ios 伺服器返回錯誤碼怎麼拿到

ios向服務端發起請求報錯:內部伺服器錯誤 (500),有需要的朋友可以參考下。

ios端運用AFHTTP框架向服務端發起請求,但是報錯:

<span style="font-size:10px;">Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: 內部伺服器錯誤 (500)" UserInfo=0x17f95580 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x17daddb0> { URL: http://192.168.1.68/Interface/MessageService.asmx/RegNewsLog } { status code: 500, headers {
"Cache-Control" = private;
"Content-Length" = 28;
"Content-Type" = "text/plain; charset=utf-8";
Date = "Mon, 23 Mar 2015 01:40:47 GMT";
Server = "Microsoft-IIS/7.5";
"X-AspNet-Version" = "4.0.30319";
"X-UA-Compatible" = "IE=EmulateIE7";
"content-script-type" = "text/javascript";
"content-style-type" = "text/css";
} }, NSErrorFailingURLKey=http://192.168.1.68/Interface/MessageService.asmx/RegNewsLog, NSLocalizedDescription=Request failed: 內部伺服器錯誤 (500), com.alamofire.serialization.response.error.data=<e7bcbae5 b091e58f 82e695b0 3a204c6f 6e676974 756465e3 80820d0a>}
</span>

查找原因:

a、一開始以為是傳回來的格式不正確,默認是傳回json數據的,但是我調用的這個方法返回的是字元串數據。所以將服務端返回的數據改成json,還是出錯。

b、將服務端的後台代碼全都注釋,排除是否因為服務端的代碼出錯,導致返回失敗。整個函數直接返回一個json字元,還是報錯,

c、那就是入參的問題了,查看傳入參數的名稱,發現服務端的其中一個參數名稱為:Longitude,但是我傳過去的是Longtitude,就差了一個t,導致了服務端不認傳過來的參數所以報錯。

總結:

1、以後進行服務端請求時,應該完全把服務端的入參名稱粘貼過來就可以了,不要自己寫。容易造成不一致(不一定哪端沒寫對)

2、服務端報錯不一定全都是服務端的原因,完全有可能是客戶端的入參有問題,導致服務端出錯。

熱點內容
文件夾金屬夾 發布:2025-05-03 13:26:52 瀏覽:508
劍俠情緣需要什麼配置 發布:2025-05-03 13:14:24 瀏覽:562
2b2t伺服器ip國際服 發布:2025-05-03 13:13:42 瀏覽:888
如何增加內部存儲空間 發布:2025-05-03 13:09:18 瀏覽:412
新點103加密狗 發布:2025-05-03 13:02:13 瀏覽:251
如何用伺服器製作公有雲 發布:2025-05-03 12:55:29 瀏覽:797
機械編程數控 發布:2025-05-03 12:53:30 瀏覽:76
tplink怎麼加密 發布:2025-05-03 12:53:21 瀏覽:494
流行在線網吧配置怎麼樣 發布:2025-05-03 12:46:15 瀏覽:586
游戲輔助c語言 發布:2025-05-03 12:46:13 瀏覽:418