基本的TCP IP Socket用法(二)

2021-09-30 08:50:46 字數 1537 閱讀 8834

1、前言

伺服器端的構建,相比較構建客戶更加困難。但若只考慮網路部分時,兩種工作事實上是對等的。建立伺服器時遇到的主要困難主要來自像併發和資源處理這樣的問題。

(1)定義位址

(2)在該位址上開啟用於偵聽新連線的接受器,然後等待連線請求的到達

在等待過程中,要進行各種異常的處理,如錯誤編號是eintr,表示網路出現問題,可繼續等待;etimedout表示超時,也可以繼續等待。無論如何,若有有異常,最好寫入一條日誌記錄,跟蹤事件。

(3)若開啟成功,將返回乙個已經初始化的有效端對端物件,它代表與客戶的連線。此後的通訊中,伺服器和客戶端的區分已經不明顯了,因為那是乙個雙向的對等通訊。

2、伺服器端**(與前面客戶端**一起,可以配合執行)

以下是伺服器端的**:

// basesocket_practice_server.cpp : 定義控制台應用程式的入口點。

//#define ace_ntrace 0

#include "ace/inet_addr.h"

#include "ace/sock_stream.h"

#include "ace/sock_acceptor.h"

#include "ace/log_msg.h"

#include "ace/time_value.h"

#include "ace/streams.h"//訊息流檔案重定向

#include "ace/log_record.h"//ace_log_record物件定義

#include "ace/sstring.h"

#include "define.h"

int ace_tmain(int argc, ace_tchar* ar**)

else if(ace_os::last_error()==etimedout)//等待超時,若超時寫一條日誌記錄,但監聽迴圈不退出

}else

//每個客戶端通訊完畢,關閉流

peer.close();

ace_debug((lm_debug,ace_text("peer closed./n")));}}

//ace_log_msg->clr_flags(ace_log_msg::ostream);//非常重要,否則最後一條日誌將嘗試在已經刪除的output物件上寫

//delete output;//釋放記憶體

return (0);

}3、小結

(1)若只考慮網路的話,伺服器端的建立與客戶端的建立工作對等;

(2)本程式和前面文章中的客戶端程式同時執行,演示客戶端和伺服器端的通訊,伺服器端將客戶端發來的資訊原封不動地回發給客戶端。伺服器端可以處理多個客戶的連線,但每次只能服務乙個客戶;

(3)從日誌資訊定向來看,兩個程式若在同乙個計算機中執行的話,顯然不能都寫往同乙個目標流。本例中,伺服器端寫往控制台,客戶端則重定向到檔案流;

(4)沒有解決的問題是,重定向到檔案流的日誌,有亂碼出現(控制台顯示則沒有,除錯跟蹤發現各變數也沒有亂碼字元)。這個問題沒有解決。

linux下的TCP IP socket 檔案傳輸

伺服器 本檔案是伺服器的 include for sockaddr in include for socket include for socket include for printf include for exit include for bzero include for time t an...

linux下的TCP IP socket 檔案傳輸

linux下的tcp ip socket 檔案傳輸 2010年04月02日 星期五 上午 10 56 伺服器 本檔案是伺服器的 include for sockaddr in include for socket include for socket include for printf inclu...

sharedPreference的基本用法

android儲存資料的形式主要有四種 1 sharedpreference,是乙個系統定義好的xml檔案 2 檔案系統 3 sqlite 4 網路儲存 這裡是sharedpreference 寫入 1 建立新的sharedpreference sharedpreferences sharedpre...