基於ACE的網路服務端通訊程式設計

2021-04-16 02:47:36 字數 2470 閱讀 1878

完成了基本的通訊功能

測試報告如下:

昨天準備11臺   只有7臺機子可以執行  每個開了10個

大部分  都好的   有1台開10個的時候出錯   還有1臺早上看的時候10個都出錯

根據上面的圖顯示結果來看是由於服務端先關閉,客戶端傳送資料失敗導致。

源**如下:

class clientacceptor : public ace_event_handler

//當乙個連線準備接受的時候呼叫這個函式

virtual int handle_input(ace_handle fd = ace_invalid_handle);

//當這個控制代碼從ace_reactor中移除的時候呼叫這個函式

virtual int handle_close(ace_handle handle,ace_reactor_mask close_mask);

protected:

ace_sock_acceptor acceptor_;}; 

#i nclude "stdafx.h"

#i nclude "./lientacceptor.h"

clientacceptor::clientacceptor(void)

clientacceptor::~clientacceptor(void)

int clientacceptor::open(const ace_inet_addr &listen_addr)

return this->reactor()->register_handler(this,ace_event_handler::accept_mask);}

int clientacceptor::handle_input(ace_handle)

p.release();

client->reactor(this->reactor());

if(client->open() == -1)

return 0;

} int clientacceptor::handle_close(ace_handle,ace_reactor_mask)

return 0;

} class clientservice : public ace_event_handler

int open(void);

//得到當前控制代碼的i/o控制代碼

virtual ace_handle get_handle(void) const

//當客戶端出現乙個input

virtual int handle_input(ace_handle fd = ace_invalid_handle);

//當發生乙個output的時候

virtual int handle_output(ace_handle fd = ace_invalid_handle);

//當從ace_reactor移除乙個控制代碼的時候

virtual int handle_close(ace_handle handle,ace_reactor_mask close_mask);

protected:

ace_sock_stream sock_;

ace_message_queueoutput_queue_;

}; #i nclude "stdafx.h"

#i nclude "./lientservice.h"

clientservice::clientservice(void)

clientservice::~clientservice(void)

int clientservice::handle_input(ace_handle)

/** 在這裡加入資料報處理函式

*/send_cnt = this->sock_.send(buffer,ace_static_cast(size_t,recv_cnt));

if(send_cnt == recv_cnt)

if(send_cnt == -1 && ace_os::last_error() != ewouldblock)

if(output_off)

return 0;

}int clientservice::handle_output(ace_handle)

else

if(mb->length() > 0)

mb->release();

}return(this->output_queue_.is_empty())? -1 : 0;

}int clientservice::handle_close(ace_handle,ace_reactor_mask mask)

int clientservice::open(void)

return this->reactor()->register_handler(this,ace_event_handler::read_mask);} 

ACE服務端程式設計5 ACE日誌輸出和跟蹤

伺服器程式經常需要在命令列中顯示錯誤訊息 狀態或者用來跟蹤程式的執行路徑,最簡單的方法是使用printf。ace提供了更強大日誌設施 1 可以在編譯時啟用或禁用巨集 2 可以動態的啟用或禁用巨集 3 支援日誌嚴重級別 4 支援日誌重定向 5 支援多執行緒安全和執行緒級配置 使用ace的日誌相關功能,...

C 網路程式設計(服務端程式)

include include 載入靜態lib檔案或者載入動態dll檔案 pragma comment lib,ws2 32.lib void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 建立用於監聽的套接字 socket ...

linux網路程式設計 廣播服務端

解釋都在 裡 廣播接收服務端 include include include include include include include include define dbgprint printf define print printf define ip found ip found ip發...