Military Engineering College Undergraduation Thesis
based on
ACE
Service locator
2006
Computer engineering
Instructor: Zhang Jianyu
Student Name: Zhuang Zenan
Military Engineering College
June 2006
Abstract
ACE
Adaptive communication environment (Adaptive Communication Environment)
)
C
To develop a mature kit for communication software. This article will explain it
ACE
Development service locator, service locator is a service location module in the RBR system, in which the service locator provides a unified bitmap service for client access service.
Service Locator implements the following features:
1,
Store the IP, ports, certificates of each service of the service layer, and provide queries, updates, and delete functions.
2,
Store the client's session ID (SESSIONID), certificate, connection time, etc., and provides functions such as creation, update.
3,
Verify the client's certificate, verify the correctness, timeliness of the client's sessionID.
4,
Depending on the client's request, send server IP, port and other information.
5,
General communication features of the network program.
In the service locator, we use the ACE's many frameworks, where the ACE Accordor-Connector framework is used to implement communication between servers and clients; ACE STREAMS workflow to handle messages between servers and clients; ACE_MESSAGE_BLOCK is used Connection to the message of the message, etc .; ACE CDR provides a formatting tool for the intersection and solving ACE_MESSAGE_BLOCK.
In the design of the service locator, the processing is completed according to the following process:
1,
When a new customer needs to obtain server information corresponding to the service name, first register the client information to the server, get a sessionID, and register your own information on the location server (IP, certificate, sessionID, etc.).
2,
If the customer wants to apply for a service, apply to the location server to obtain a list of server, if the service you want to get does not exist, give up.
3,
If the service is present, the client applies for server information to the server, saved locally.
Finally, the improvement mode of the service locator is proposed, mainly using sessionid to manage the connection.
Keywords: ACE, service locator, network communication, RBR system
table of Contents
Figure 1-1 ACE Hierarchical Map
1.2.1 ACE OS adaptation layer
This layer is c
Write, directly in the local OS API
Above. It offers light class POSIX OS
Adaptation layer, put ACE
Other layers and components and below with OS API
The associated platform proprietary feature shielded:
l Concurrency and synchronization: The adaptation layer of the ACE encapsulates the OS API for multithreading, multi-process and synchronization.
l Inter-process communication (IPC) and shared memory: ACE adaptation layer encapsulates the OS API for local and remote IPCs, and shared memory.
l Event multi-channel separation mechanism: ACE adaptation layer encapsulates an OS API for synchronizing and asynchronous multi-channel.
l Explicitly dynamic link: ACE adaptation layer encapsulates an OS API for explicit dynamic links. Explicit dynamic links allow configuration services to be configured when installing or runtime.
l File system mechanism: ACE adaptation layer encapsulates an OS file system API for operating files and directories.
ACE OS
Portability of the adaptation layer makes ACE
Can run on many operating systems. ACE
Has been in a wide range of OS
Transplant and testing on the platform, including Win32
(I.e., in Intel
ALPHA
Platform, use MSVC , Borland C Builder
And IBM Visual Age
Winnt 3.5.x
, 4.x
2000
, WIN95 / 98
Wince
), Mac OS X
Most versions of UNIX
(For example, SPARC
Intel
Solaris 1.x
And 2.x
SGI Irix 5.x
And 6.x
DG / UX
HP-UX 9.x
, 10.x
And 11.x
, Dec / Compaq Unix 3.x
And 4.x
, AIX 3.x
And 4.x
Unixware
, SCO
, And unixable unix
Realize, such as Debian Linux 2.x
Redhat Linux 5.2
6.x
And 7.x
FreeBSD
NetBSD
), Real-time operating system (for example, Lynxos
, VxWorks
, Chorus Classix 4.0
QNX neutrino
RTEMS
PSOS
), MVS OpeNedition
And CRAY UNICOS
.
Due to ACE
OS
The abstraction provided by the fitting layer, all of which use the same code tree. Such a design greatly enhances ACE
Portability and maintainability. In addition, there is Java
Version ACE
Available
http://www.cs.wustl.edu/~ee1/jace.html
).
1.2.2 OS interface C packaging appearance
Can be directly in Ace OS
Preparation of highly portable C above the fitting layer
application. However, most ACEs
Developers use C shown in the above figure
Packaging the appearance layer. Provide type C
Interface (these interfaces package and enhance local OS
Concurrency, communication, memory management, event multi-channel separation, dynamic link, and file system API
), ACE
The appearance of packaging simplifies the development of applications. Applications can be inherited, polymerized, and /
Or instantiate the following components to combine and use these packages:
l Conferred and synchronous components: ACE logs like a local OS multi-thread and multi-process mechanism like muters and semaphors to create advanced OO concurrency abstraction, like active objects (Active Object) and polymorphism (Polymorphic Future) ).
l IPC and file system components: ACE C packages package local and / or remote IPC mechanisms, such as Socket, TLI, UNIX FIFO, and Stream pipes, and Win32 named pipes. In addition, the ACE C packaging also encapsulates the OS file system API.
l Memory Management Components: ACE Memory Management Components provides flexible and scalable abstractions to manage the dynamic allocation and release of the management process.
ACE C
Packaging provides many with Ace OS
The same characteristics are the same. However, these characteristics are C
Categories and objects, rather than independent C
The function is constructed. Such OO
Packaging helps reduce proper learning and use ACE
The effort required.
For example, C
Use to improve the robustness of the application, because C
Packaging is a strong type. Therefore, the compiler can be compiled, not the runtime detection type system violation. Conversely, it is impossible to detect Socket when not running.
Or file system I / O
Such C
First class OS API
Type system violation.
ACE
Many techniques are used to reduce or eliminate additional performance overhead. For example, ACE
A large number of C inline is used to eliminate additional methods to call overhead; this overhead can be made from OS
Adapter layer and C
Additional types of safety and abstract hierarchies provided by packaging. In addition, packaging with high performance requirements, such as Socket
And file I / O
Send / Recv
Method, ACE
Will avoid using virtual functions.
1.2.3 architecture
ACE
Also includes a advanced network programming architecture, integrated and enhanced lower level C
Packaging appearance. This architecture supports the dynamic configuration of concurrent distributed services. ACE
The frame portion contains the following components:
l Event Multi-channel Separation Components: ACE Reactor and Proactor (front-sleeper) are scalable object-oriented multi-channel separators that assign a specific processor to respond to multiple types of I / O, timing Events, signals and synchronization events.
l Service Initialization Components: ACE Acceptor and Connector (Connector) components respectively make the initialization and passive initialization tasks with initialization once the application unique task decoupled.
l Services Configuration Components: ACE Service Configurator supports application configuration, which is dynamically assembled when installing and / or runtime.
l Layered flow components: The ACE STREAM component simplifies the development of communication software applications composed of hierarchical services such as user-level protocol stacks.
l ORB Adapter Components: ACE can be seamlessly integrated with single thread and multi-thread CORBA through the ORB adapter.
ACE
The architectural assembly can be updated and expanded without modifying, recompiling, linked, or frequently restarting applications in operation. In Ace
In this flexibility, it is obtained by combining the following elements: (1
) C
Language characteristics, such as templates, inheritance and dynamic binding, (2
) Design mode, such as abstract factories, strategies, and service configuresters, and (3
OS
Mechanism, such as explicit dynamic links and multi-threaded.
1.3 OpenSSL
1998,
The OpenSSL project group took over the development of OpenSSL and launched the version 0.9.1 of OpenSSL. So far, OpenSSL's algorithm has been very perfect, support SSL2.0, SSL3.0, and TLS1.0 support. OpenSSL currently the latest version is 0.9.7B. OpenSSL uses C language as a development language, which makes OpenSSL have excellent cross-platform performance, which is a very wonderful thing for the majority of technicians that can use the same familiar things in different platforms. OpenSSL supports Linux, Windows, BSD, Mac, VMS and other platforms, which makes OpenSSL have extensive applicability.
As a cryptographic security development package,
OpenSSL
The feature provided is quite powerful and comprehensive, including the main password algorithms, commonly used key and certificate package management functions, and SSL protocols, and provides a wealth of applications for testing or other purposes.
.
1.3.1 asymmetric encryption algorithm
OpenSSL
A total of four asymmetric encryption algorithms, including DH algorithms, RSA algorithms, DSA algorithms, and elliptic curves algorithms (EC). DH algorithm general user key exchange. The RSA algorithm can be used for key exchange, or for digital signatures, of course, if you can endure its slow speed, then you can use for data encryption. The DSA algorithm is generally only used for digital signatures.
1.3.2 Key and certificate management key and certificate management are
An important part of PKI, OpenSSL provides a rich function, supporting multiple standards. OpenSSL implements the X.509 standard codec, pkcs # 12 format of the certificate, and the codec function of PKCS # 7. There is a text database that supports the management function of the certificate, including the function of the certificate key, request generated, certificate issuance, revokes, and verification.
1.3.3 application
OpenSSL's application provides relatively comprehensive features that can be used as
OpenSSL's instructions. OpenSSL's application mainly includes key generation, certificate management, format conversion, data encryption, and signature, SSL testing, and other auxiliary configuration.
Chapter II Service Locator Demand Analysis
2.1 RBR Disaster Recovery System
The RBR system is a network disaster recovery system consisting of three logical layers: a client layer, management (intermediate layer), and service layer. Among them, the client layer represents the resources of the client computer managed by the system; the management is composed of backup adapters, authentication servers, management console, etc., constitutes the management core of the system; the service layer represents the stored server resources. In the third floor, the management is in the heart of managing business logic.
The structural model of the system is shown in Figure 2-1:
Figure 2-1 Structure Model of RBR System
2.2 Service Locator Demand Analysis
2.2.1 Introduction of Service Locator
The service locator is the service location module in the RBR system, and the management is handled. As shown in Figure 2-2 below, the service locator provides a unified positioning service for the client access service layer resource:
Figure
2-2 Service Locator Schematic
In the RBR system, there will be two problems if the client can access the servers of the service layer.
1,
The IP address of each server of the service layer will inevitably expose in the client, and the hacker attacks the server to set the goal, resulting in serious security issues.
2,
If the service layer's service period IP configuration changes, the client must manually update all server IP configurations to increase the complexity of the client operation.
In order to solve the above problems, we introduce the service locator. When the client submits a request to the server's server, it is not directly sent to each server, but first sends a service request service request; when the service locator receives the service requirements request sent by the client, in the local database Query the service name of the client needs, and verify the correctness of the certificate and session ID, if the server IP, certificate, etc. of the client request, etc., if the client requests the client IP, certificate, etc. will be given to the client.
2.2.2 Service Locator
To achieve the above functions, the service locator must have the following functions:
1,
Store the IP, ports, certificates of each service of the service layer, and provide queries, updates, and delete functions.
2,
Store the client's session ID (SESSIONID), certificate, connection time, etc., and provides functions such as creation, update.
3,
Verify the client's certificate, verify the correctness, timeliness of the client's sessionID.
4,
Depending on the client's request, send server IP, port and other information.
5,
General communication features of the network program.
2.3 Summary Design of Service Locator
2.3.1 System Process Design
According to the functional analysis of Section 2.2, we design the system flow of the service locator, as shown below:
1,
When a new customer needs to obtain server information corresponding to the service name, first register the client information to the server, get a sessionID, and register your own information on the location server (IP, certificate, sessionID, etc.).
2,
If the customer wants to apply for a service, apply to the location server to obtain a list of server, if the service you want to get does not exist, give up.
3,
If the service is present, the client applies for server information to the server, saved locally. To the intuitive indication of messaging and program execution order between each module, the cooperation diagram of each module is given below:
Figure 2-4 Service Locator Cooperation Diagram
2.3.2 System Framework Design
ACE provides a set of framework solutions for the network communication program, in the service locator, we mainly use the following framework:
First, ACE Acceptor-Connector Framework
The ACE Acceptor-Connector framework is used to send and receive messages, using the ACE Acceptor-Connector Framework Communication Framework for Service Locator.
Second, Stream framework
The Stream framework is used to implement the message. In the service locator, we implemented two workflows with Stream: protocol stack flow and business flow.
send messages
Receive a message
The figure below shows the roles of these two frames in the system, and how they cooperate:
One,
He provides an IPC endpoint for passive mode for listening and accepting connections from the peer. The type of this IPC endpoint can be parameterized by many IPC Wrapper Façade classes of ACE, so that lower-level connection mechanisms are separated from the application level service initialization policy.
two,
He automatically automates the steps necessary to "passively connect IPC endpoints, create / activate" service processors associated with other associated services.
3.2.2 Use of the ACE_ACCPETOR framework
The ACE_ACCEPTOR class template can be parameterized by two classes: SVC_Handler class and peer_acceptor. The ACE_ACCEPTOR class has a flexible interface that can be widely customized by the application developer, and we divide them into two categories:
First, the initialization of the receiver
The following methods are used to initialize and destroy the ACE_ACCEPTOR object.
Table 3-1 Acceptor initialization
method
description
ACE_ACCEPTOR ()
Open ()
Bind the passive mode IPC endpoint of the receptacle to a specific address, such as the TCP port number and the IPC host address, and then listen to the arrival of the connection request.
~ ACE_ACCEPTOR ()
Close ()
Turn off the IPC endpoint of the receiver and release its resources.
Acceptor ()
Returns a reference to the underlying peer_acceptor.
Second, connection establishment and service processor initialization method
Table 3-2 Service processor creation
method
description
Handle_INPUT ()
When the connection request arrives from the peer connector, the reactor calls the template method. It can use the three methods outlined below to automate the steps necessary to passively connect the IPC endpoint and create a service processor associated with it.
Make_svc_handler ()
This factory method creates a service processor to process the data request issued from the peer service.
Accept_svc_handler ()
This hook method is to create a connected IPC endpoint with the passive mode IPC endpoint of the receptacle and package this endpoint with the service processor.
Active_svc_handler ()
This hook method calls the Open () hook method of the service processor, allowing the service processor to complete the initialization of yourself.
The following figure shows the operation of the application uses AccPetor:
Figure 3-1 Application Implementation Acceptor Framework
In general, a port service uses an Accordor instance, so there is only one Acceptor instance in one program. In actual programs, we can use the Acceptor template to create the class we need, and overload the above three service processor methods.
3.2.3 Application of Acceptor Framework in Service Locator
In this program, we created an Acceptor class directly using the ACCEPTOR template:
Class Acceptor: Public ace_acceptor
Then overload the above method:
Virtual int open (const ace_sock_acceptor :: peer_addr & local_addr, ace_reactor * Reactor = ace_reactor :: instance (),
INT flags = 0,
INT USE_SELECT = 1,
INT reuse_addr = 1);
Virtual Int make_svc_handler (ClientHandler * & sh);
Virtual int access_svc_handler (ClientHandler * SH);
Among them, ClientHandler is a service processor we designed, and he is used to address the message, and refer to Chapter 6.
3.3 Message to complete the service locator with the ACE Connector component
3.3.1 ACE_CONNECTOR class
In 3.2, we describe the characteristics and implementation methods of Acceptor as the passive server. Correspondingly, in the client we actively connect with the Connector framework. Acceptor releases the coupling of the "functional processor" and "actively connect and initialize each of the steps required." In a network of communication in a large number of auto-end, you may need to actively, and create a large number of connections in concurrently, and processed during completion. In order to combine these capabilities into flexible, scalable and reused abstraction, the ACE Acceptor-Connector framework defines the ACE_CONNECTOR class.
ACE_CONNECTOR is a factory class that implements the Connector role in Acceptor-Connector mode [POSA2]. This class provides the following capabilities:
One,
It provides an IPC factory that can actively establish a connection to the peer receptacle synchronously or reactive. The type of IPC endpoint can be parameterized by many IPC Wrapper Façade classes of ACE, thereby separating the lower level of connection mechanism to the application level service initialization policy.
two,
It enables "actively connect IPC endpoints, and the steps necessary to create and activate the sections of the service processor associated with it".
This template class is parameterized by the following two classes: SVC_Handler classes and peer_connector classes.
3.3.2 Use of the ACE_CONNECTOR framework
The ACE_CONNECTOR class has a flexible interface that can be widely customized by the application developer, and we divide them into two categories:
Table 3-3 Initialization of the Connector object
method
description
ACE_CONNECTOR ()
Open ()
Method for initializing the receptacle.
~ ACE_CONNECTOR ()
Close ()
Release its resources.
Connector ()
Returns a reference to the underlying peer_acceptor.
Table 3-4 Initialization of Service Processors
method
description
Connect ()
The application calls this template method when you want to connect a service processor to the peer to listen. It can use the following three methods to automate the steps necessary to "actively connect an IPC endpoint, create and activate the service processor associated with it."
Make_svc_handler ()
This factory method creates a service processor, the latter will use the connected IPC endpoint
Connect_svc_handler ()
This hook method uses the server's IPC endpoint to actively connect endpoints.
Active_svc_handler ()
This hook method calls the Open () hook method of the service processor, the latter allows the service processor to complete the initialization of itself after the connection is established.
HANDLE_OUTPUT ()
After the connection request of the asynchronous initiated connection, the reactor calls this template method. It calls the active_svc_handler () method to initialize the service processor
Cancel ()
Cancel a service processor is initiated asynchronously before it is connected. The caller (not a connector) is responsible for closing the service processor's chart below shows the application of the application using the Connector:
Figure 3-2 Application Realization Connector Framework
3.3.3 Application of Connector Framework in Service Locator
In order to unify the application of the Connector framework in the system, we did not directly implement the ACE_CONNECTOR template as classes, but used a template class with the template method mode.
PS_CONNECTOR, then implement our newly established template class in various programs, as shown below:
Figure 3-2 Implementation of the ACE_CONNECTOR template class
Build a custom template class:
Template
Class PS_Connector: Public ace_connector
Implement the class with a custom template class:
Class testConnector: public ps_connector
Implement server initialization method on a custom template class:
First, implement the Open () method
INT PS_CONNECTOR
Second, implement the MAKE_SVC_HANDLER () method
Template
INT PS_CONNECTOR
Third, implement the connection_svc_handler () method
Template
INT PS_CONNECTOR
Const ace_sock_connector :: peer_addr & transdr,
ACE_TIME_VALUE * TIMEOUT,
Const ace_sock_connector :: peer_addr & local_addr,
Int Reuse_addr,
Int Flags,
INT Perms
When the client starts to connect, execute the connection_svc_handler () method, so we can define what you need to do when you define the connection_svc_handler () method, in the service locator, we define SSL certification.
3.4 session connection pool
3.4.1 Traditional Socket Pointer Connection Method
Traditional network communication procedures are generally labeled with a Socket pointer, as shown below:
Figure 3-5 SESSIONPOOL connection pool map
The following table gives a description of each method:
Table 3-5 SESSIONPOOL connection pool method description
method
description
newsession ()
New session
GetSession ()
Get the value of the specified session
Isactivesession ()
Judging whether the specified session is in use
UpdateSession ()
Update the value of a session
REMOVESession ()
Delete a session
In the connection pool, we used the ACE_HASH_MAP_MANAGER_EX template class to generate a hash table storage connection information, the hash table is as follows:
Idclass -
à Reccoss
among them,
IDCLASS is used to store management sessionid, Recclass is used to store connection information (customer message message category, subcategory, failure time). 3.5 SSL certification in service locator
In the ACE ACCEPTOR-Connector framework, we set SSL authentication to ensure the security of the connection. OpenSSL can ensure that all data communications are performed in the channel of SSL. In the service locator, we did not allow all data to encrypt through SSL, but verified the validity of the certificate when connecting, verifying the SSL immediately after verification connection.
3.5.1 Generation of OpenSSL Certificate
OpenSSL provides two certificates to generate, one is a certificate of CA, one is a certificate that does not require a CA sign. In the service locator, in order to reduce complexity, we have no CA server to verify the distributed certificate.
The following command is used to generate a key to the certificate:
Openssl Genrsa -Des3 -out Privkey.pe 2048
The following command is used to generate a certificate:
OpenSSL Req -new -x509 -key privkey.pey.pey.pem -out cacert.pem -days 1095
We use this command to generate two pairs of certificates, which are used for server and client:
Table 3-5 List of certificates for SSL
file name
description
PRIVKE_SERVER.PEM
Service private key file
CACERT_SERVER.PEM
Server certificate file
Privkey.pem
Client's private key file
Cacert.pem
Certificate file for the client
3.5.2 SSL Connection Verification
We use the following figure to represent the flow of the SSL connection:
Figure 4-1 Stream framework
4.2 Service Locator Stream Framework
4.2.1 Implementation of Head Modules and Tail Modules
As shown in FIG. 4-1, each of the head and tail of the Stream stream frame has a module to process data exchanges performed. As shown in the figure below, we give the stream framework for service locator:
Message processing module
Head module
Figure 5-1 Communication message class diagram
Below, we give the contents of each message:
Table 5-2 COMMAD content
Member name
format
description
Totallength
ACE_CDR :: Ulong
Data length
Type
ACE_CDR :: Ushort
Command category
Subtype
ACE_CDR :: Ushort
Command subclass
Length
ACE_CDR :: Ulong
Message length
All messages are identified by Type and Subtype:
Class name
TYPE value
Subtype value
CS_SERVICELISTREQUEST
11
1
SC_ServiceListResponse
12
1
CS_SERVICEREQUEST
11
2
SC_BADREQUEST1
12
2
SC_BADREQUEST2
12
3
SC_GOODREQUEST
12
3
CS_REGISTER2SERVICE
12
4
5.2 Service Locator Transmission Message Method
5.2.1 ACE_MESSAGE_BLOCK Message Class
In the locating server, all messages are stored through the ACE_MESSAGE_BLOCK class, and the ACE_MESSAGE_BLOCK class stores messages in a string, and the message can be transmitted directly on the network. ACE_MESSAGE_BLOCK can be flexible, efficiently shared, and can reduce additional overhead brought by memory replication. The ACE_MESSAGE_BLOCK allows multiple messages to be connected to form a single-link table to support composite messages. All ACE_MESSAGE_BLOCK has a read pointer (controlled by RD_PTR () and a write pointer (by WR_PTR ()). Let's give a ACE_MESSAGE_BLOCK class diagram:
HEAD
Token = "/ t ~ begin"; three, cs_register2service processing
The CS_REGISTER2SERVICE message is used to register a service and apply for a new ID. This message should be used when the new user first access the service, or the old user's sessionID is rejected. We use the UUID structure provided by the RPC.H of the Windows system when establishing a new ID. It is the ID structure determined by the time and network card address, so it can guarantee uniqueness, the code is:
UUID sessionID;
// Newly built a UUID structure
UUIDCREATE (& sessionID);
// Establish a UUID
In addition, we overload operators == to facilitate sessionID comparison:
Bool Operator == (Const Uuid & R) Const
{
Return 0 == :: Memcmp (this, & r, sizeof (uuid));
}
The processed message is placed in the traffic flow processing frame, and then returns back to the client, complete the delivery of the message.
Conclude
Today, the development of a variety of network procedures is increasingly mature today. ACE is a quite mature network development kit, its efficiency, cross-platformability makes more and more people start using his development network software.
In this graduation design, we use ACE to develop a service locator to develop software for efficient and extended capabilities. In this development, familiar with the ACE environment is more important, because its complex framework and many classes, so familiarity is more difficult. During the development process, I have been familiar with the environment of ACE. in
ACE
More difficult places are,
ACE_MESSAGE_BLOCK
The use of class,
ACE Acceptor-Connector
The use of the frame,
Ace streams
The use of the frame. in
ACE
In the use, familiar with a large number of design patterns, learn many object-oriented software design methods. In addition
OpenSSL
The use also gives the service locator security guarantee, but because this information is mostly in English, it is relatively slow.
When the program is designed, a major difficulty is the length of the character. Since the message is formatted, the character length is different, so the impact of the length change of the message is required when processing. When the program test, this is convenient for the problem to bring a relatively large amount of trouble and time price, which can refer to the excellent message processing method to improve its own procedures when designing the next network communication program. Level.
Finally, we implemented the function of the service locator, so that the client can query the server information of the target service based on the service locator. in
OpenSSL
In the implementation of the verification, we did not take into account the process after verification. In addition, in the storage of the list of service list information, we use it in the storage of client information.
ACE
We can use when we can use
Hash
The table stores the service list information and client information.
Hash
In the table, then use file storage so that it can guarantee more secure and efficient. In addition, it is now verified. use
IP
To identify the client, you can use it when you improve it.
SessionID
To identify the client to ensure his uniqueness and timeliness. Through the above improvements, it is believed to improve the more complete service locator.
Thank you
The graduation design of three months has been over. In this graduation design, Zhang Jianjun teachers gave me a lot of help. In the issue of the issue, the collection of information, the research and design of the topic, the revision of the paper gave me great guidance and support, It can be said that there is no teacher, this issue is unable to complete. The rigorous teaching of Zhangbanians and extremely high academic levels give me a very large influence. Here, I am sincere thanks. In the four-year life, the faculty of the military engineering college has given me the most precious and important time of my life, I gave me the concerns and guidance, especially the faculty of the Computer Engineering, they are in professional learning. I gave me great guidance. Special thanks to you here.
In addition, in the four years, our team cadres gave our lives and people to care and guidance, thank you here. And friends living with us four years, you are the most precious wealth of my life.
references
[1] (US) Douglas C. Schmidt is in Chunjing: C Network Programming Volume 1, Huazhong University of Science and Technology Press, December 2003
[2] (US) Douglas C. Schmidt Trend: C Network Programming Volume 2, Electronic Industry Press, January 2004
[3] (US) Douglas C. Schmidt: C NPV1 slide, www.dre.vanderbilt.edu / ~ Schmidt /
[4] (US) Douglas C. Schmidt: C NPV2 slide, www.dre.vanderbilt.edu / ~ Schmidt /
[4] (US) Douglas C. Schmidt Madden Translation: ACE Self - adaptive Communication Environment Chinese Technical Documentation
[5] (US) DOUGLAS C. Schmidt: Ace Software Development Guidelines,
http://www.cs.wustl.edu/~schmidt/rules.html
[6]
Zhang Jian is: ACE notes, August 2005
[7]
Money, C program design tutorial, Tsinghua University Press, May 2003
[8] (
USBRUCE Eckel, Thinking In C , China Machine Press January 2005
[8]
Zhou Bosheng: Standard Modeling Language UML, Beijing Computer World, 1998
[10] (US) James Rumbaugh, The Uml Reference Manual, AddSION-WESLEY, 1999