完成了基本的通訊功能
測試報告如下:
昨天準備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發...