锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎴戜滑榪樻槸鍏堢湅浠栫殑浠g爜鍚?//聽acetest2.cpp聽:聽Defines聽the聽entry聽point聽for聽the聽console聽application.
聽2//
聽3
聽4//聽client.cpp
聽5
聽6#include聽"ace/OS_main.h"
聽7#include聽"ace/OS_NS_string.h"
聽8#include聽"ace/OS_NS_sys_socket.h"
聽9#include聽"ace/OS_NS_unistd.h"
10#include聽"ace/OS_NS_stdlib.h"
11#include聽"ace/OS_NS_stdio.h"
12#include聽"ace/OS_NS_netdb.h"
13#include聽"ace/Default_Constants.h"
14
15ACE_RCSID(SOCK_SAP,聽client,聽"client.cpp,v聽4.10聽2005/01/21聽02:19:20聽ossama聽Exp")
16
17/**//*聽BSD聽socket聽client聽*/
18
19int
20ACE_TMAIN聽(int聽argc,聽ACE_TCHAR聽*argv[])
21{
22聽聽//聽Initialize聽WinSock聽DLL聽on聽Win32
23聽聽ACE_OS::socket_init聽(ACE_WSOCK_VERSION);
24
25聽聽struct聽sockaddr_in聽saddr;
26聽聽struct聽hostent聽*hp;
27聽聽const聽ACE_TCHAR聽*host聽=聽argc聽>聽1聽?聽argv[1]聽:聽ACE_DEFAULT_SERVER_HOST;
28聽聽u_short聽port_num聽=
29聽聽聽聽htons聽(argc聽>聽2聽?聽ACE_OS::atoi聽(argv[2])聽:聽ACE_DEFAULT_SERVER_PORT);
30聽聽int聽sockbufsize聽=聽argc聽>聽3聽?聽ACE_OS::atoi聽(argv[3])聽:聽0;
31聽聽char聽buf[BUFSIZ];
32聽聽ACE_HANDLE聽s_handle;
33聽聽int聽w_bytes;
34聽聽int聽r_bytes;
35聽聽int聽n;
36
37聽聽//聽Create聽a聽local聽endpoint聽of聽communication.
38聽聽if聽((s_handle聽=聽ACE_OS::socket聽(PF_INET,聽SOCK_STREAM,聽0))聽==聽ACE_INVALID_HANDLE)
39聽聽聽聽ACE_OS::perror聽(ACE_TEXT("socket")),聽ACE_OS::exit聽(1);
40
41聽聽//聽If聽a聽sockbufsize聽was聽specified,聽set聽it聽for聽both聽send聽and聽receive.
42聽聽if聽(sockbufsize聽>聽0)
43聽聽
{
44聽聽聽聽if聽(ACE_OS::setsockopt聽(s_handle,聽SOL_SOCKET,聽SO_SNDBUF,
45聽聽聽聽聽聽(const聽char聽*)聽&sockbufsize,
46聽聽聽聽聽聽sizeof聽(sockbufsize))聽!=聽0)
47聽聽聽聽聽聽ACE_OS::perror聽(ACE_TEXT("SO_SNDBUF")),聽ACE_OS::exit聽(1);
48聽聽聽聽if聽(ACE_OS::setsockopt聽(s_handle,聽SOL_SOCKET,聽SO_RCVBUF,
49聽聽聽聽聽聽(const聽char聽*)聽&sockbufsize,
50聽聽聽聽聽聽sizeof聽(sockbufsize))聽!=聽0)
51聽聽聽聽聽聽ACE_OS::perror聽(ACE_TEXT("SO_RCVBUF")),聽ACE_OS::exit聽(1);
52聽聽}
53
54聽聽//聽Determine聽IP聽address聽of聽the聽server.
55聽聽if聽((hp聽=聽ACE_OS::gethostbyname聽(ACE_TEXT_ALWAYS_CHAR(host)))聽==聽0)
56聽聽聽聽ACE_OS::perror聽(ACE_TEXT("gethostbyname")),聽ACE_OS::exit聽(1);
57
58聽聽//聽Set聽up聽the聽address聽information聽to聽contact聽the聽server.
59聽聽ACE_OS::memset聽((void聽*)聽&saddr,聽0,聽sizeof聽saddr);
60聽聽saddr.sin_family聽=聽AF_INET;
61聽聽saddr.sin_port聽=聽port_num;
62聽聽ACE_OS::memcpy聽(&saddr.sin_addr,聽hp->h_addr,聽hp->h_length);
63
64聽聽//聽Establish聽connection聽with聽remote聽server.
65聽聽if聽(ACE_OS::connect聽(s_handle,
66聽聽聽聽reinterpret_cast<sockaddr聽*>聽(&saddr),
67聽聽聽聽sizeof聽saddr)聽==聽-1)
68聽聽聽聽ACE_OS::perror聽(ACE_TEXT("connect")),聽ACE_OS::exit聽(1);
69
70聽聽//聽Send聽data聽to聽server聽(correctly聽handles聽"incomplete聽writes"聽due聽to
71聽聽//聽flow聽control).
72
73聽聽while聽((r_bytes聽=聽ACE_OS::read聽(ACE_STDIN,聽buf,聽sizeof聽buf))聽>聽0)
74聽聽聽聽for聽(w_bytes聽=聽0;聽w_bytes聽<聽r_bytes;聽w_bytes聽+=聽n)
75聽聽聽聽聽聽if聽((n聽=聽ACE_OS::send聽(s_handle,聽buf聽+聽w_bytes,
76聽聽聽聽聽聽聽聽r_bytes聽-聽w_bytes))聽<聽0)
77聽聽聽聽聽聽聽聽ACE_OS::perror聽(ACE_TEXT("write")),聽ACE_OS::exit聽(1);
78
79聽聽if聽(ACE_OS::recv聽(s_handle,聽buf,聽1)聽==聽1)
80聽聽聽聽ACE_OS::write聽(ACE_STDOUT,聽buf,聽1);
81
82聽聽//聽Explicitly聽close聽the聽connection.
83聽聽if聽(ACE_OS::closesocket聽(s_handle)聽==聽-1)
84聽聽聽聽ACE_OS::perror聽(ACE_TEXT("close")),聽ACE_OS::exit聽(1);
85聽聽return聽0;
86}
87
88
89
鐩存帴緙栬瘧,浜х敓濡備笅閿欒------聽Build聽started:聽Project:聽acetest2,聽Configuration:聽Debug聽Win32聽------
Compiling
acetest2.cpp
Linking
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ace_os_main_i(class聽ACE_Main_Base聽&,int,char聽*聽*聽const)"聽(__imp_?ace_os_main_i@@YAHAAVACE_Main_Base@@HQAPAD@Z)聽referenced聽in聽function聽_main
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽public:聽__thiscall聽ACE_Main_Base::ACE_Main_Base(void)"聽(__imp_??0ACE_Main_Base@@QAE@XZ)聽referenced聽in聽function聽"public:聽__thiscall聽ACE_Main::ACE_Main(void)"聽(??0ACE_Main@@QAE@XZ)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::closesocket(void聽*)"聽(__imp_?closesocket@ACE_OS@@YAHPAX@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::write(void聽*,void聽const聽*,unsigned聽int)"聽(__imp_?write@ACE_OS@@YAHPAXPBXI@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::recv(void聽*,char聽*,unsigned聽int,int)"聽(__imp_?recv@ACE_OS@@YAHPAXPADIH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::send(void聽*,char聽const聽*,unsigned聽int,int)"聽(__imp_?send@ACE_OS@@YAHPAXPBDIH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::read(void聽*,void聽*,unsigned聽int)"聽(__imp_?read@ACE_OS@@YAHPAX0I@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::connect(void聽*,struct聽sockaddr聽*,int)"聽(__imp_?connect@ACE_OS@@YAHPAXPAUsockaddr@@H@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽*聽__cdecl聽ACE_OS::memcpy(void聽*,void聽const聽*,unsigned聽int)"聽(__imp_?memcpy@ACE_OS@@YAPAXPAXPBXI@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽*聽__cdecl聽ACE_OS::memset(void聽*,int,unsigned聽int)"聽(__imp_?memset@ACE_OS@@YAPAXPAXHI@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽struct聽hostent聽*聽__cdecl聽ACE_OS::gethostbyname(char聽const聽*)"聽(__imp_?gethostbyname@ACE_OS@@YAPAUhostent@@PBD@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::setsockopt(void聽*,int,int,char聽const聽*,int)"聽(__imp_?setsockopt@ACE_OS@@YAHPAXHHPBDH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽__cdecl聽ACE_OS::exit(int)"聽(__imp_?exit@ACE_OS@@YAXH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽__cdecl聽ACE_OS::perror(char聽const聽*)"聽(__imp_?perror@ACE_OS@@YAXPBD@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽void聽*聽__cdecl聽ACE_OS::socket(int,int,int)"聽(__imp_?socket@ACE_OS@@YAPAXHHH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::atoi(char聽const聽*)"聽(__imp_?atoi@ACE_OS@@YAHPBD@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
acetest2.obj聽:聽error聽LNK2019:聽unresolved聽external聽symbol聽"__declspec(dllimport)聽int聽__cdecl聽ACE_OS::socket_init(int,int)"聽(__imp_?socket_init@ACE_OS@@YAHHH@Z)聽referenced聽in聽function聽"int聽__cdecl聽ace_main_i(int,char聽*聽*聽const)"聽(?ace_main_i@@YAHHQAPAD@Z)
Debug/acetest2.exe聽:聽fatal聽error聽LNK1120:聽17聽unresolved聽externals
瑙e喅鏂規硶,鏄紜殑閾炬帴ace(x).lib
鍏朵腑, release鐗堝搴旂殑鏄痑ce.lib,debug瀵瑰簲鐨勬槸aced.lib
鍚屾椂錛岃繕瑕佺‘淇濈紪杈戝櫒鑳芥紜壘鍒癮ce(x).lib鐨勪綅緗紟
綆鍗曠殑鍔炴硶鏄姞鍏ヤ笅闈㈢殑浠g爜#ifdef聽_DEBUG
#pragma聽聽comment聽(lib,"aced.lib")
#else
#pragma聽聽comment聽(lib,"ace.lib")
#endif
聽
]]>
ACE_Message_Block灝忕煡璇?/STRONG>
ACE_Message_Block* mb = new ACE_Message_Block(BUFSIZ);
mb->copy(buff); //buff鍏堝凡緇忓垵濮嬪寲
2.1
ACE_Message_Block* mb = new ACE_Message_Block(buff,len);
mb->wt_ptr(len); //len鏄痓uff鐨勯暱搴?len = strlen(buff) +1
// +1 琛ㄧず鍚庨潰鐨刓0
ACE_Message_Block* mb = new ACE_Message_Block(BUFSIZ);
ACE_OS::sprintf(mb->wt_ptr(),buff);
mb->wt_ptr(len);
ACE_Message_Block* mb = new ACE_Message_Block(len,
ACE_Message_Block::MB_DATA,
mb2, //琛ㄧず mb->cont(mb2)
buff)
mb->wt_ptr(len);
mb->cont(mb2);
mb2->cont(mb3); //ok
***mb3->cont(mb); //姝誨畾浜?/DIV>
ACE_Message_Block* lastMsg =ACE_Message_Block ,ACE_Message_Block::MB_STOP)
otherTask鍦ㄦ帴鏀跺埌鐨勬椂鍊欏涓嬪鐞?BR>
{
ACE_Message_Block* mb;
while(1)
{
getq(mb);
if(mb->get_tpye() == ACE_Message_Block::MB_STOP)
{
mb->release();
break; //閫鍑鴻繖涓案涔呴檺鐜?
}
else
{
handle_message(mb); //澶勭悊榪欐潯娑堟伅
}
} // end while
return 0;
}
]]>