cocoa socket client

来源:互联网 发布:天互数据怎么样 编辑:程序博客网 时间:2024/06/18 08:21

 加入协议的头文件。创建客户端类
#import <Foundation/Foundation.h>
// do_client.m
#import "do_common.h"
@interface DOClient : NSObject <ServerProtocol>
{
    id proxy;
    NSNotificationCenter *dnc;
}
- (void)defaultNotificationHandler:(NSNotification *)notification;
- (NSString *)whoAreYou;
- (void)cleanup;
- (void)connect;
- (void)doTest;
@end
// client
@implementation DOClient
-(id)init
{
    self = [super init];
    return self;
}
- (void)dealloc
{
    [self cleanup];
    [super dealloc];
}
- (void)cleanup
{
    if (proxy) {
        NSConnection *connection = [proxy connectionForProxy];
        [connection invalidate];
        [proxy release];
        proxy = nil;
    }
}
- (NSString *)whoAreYou
{
    return @"I am a DO client.";
}
- (void)connect
{
    NSSocketPort *port;
    NSConnection *connection;
    port = [[NSSocketPort alloc] initRemoteWithTCPPort:DO_DEMO_PORT
                                                  host:@DO_DEMO_HOST];
    connection = [NSConnection connectionWithReceivePort:nil sendPort:port];
    [connection setReplyTimeout:5];
    [connection setRequestTimeout:5];
    [port release];
NS_DURING
    proxy = [[connection rootProxy] retain];
    [proxy setProtocolForProxy:@protocol(ClientProtocol)];
    [proxy helloFromClient:self];
NS_HANDLER
    [self cleanup];
NS_ENDHANDLER
}
- (void)doTest
{
    [proxy setA:4.0];
    [proxy setB:9.0];
    float result = [proxy getSum];
    NSLog(@"%f", result);
}
@end


// client main program
int main(int argc, char **argv)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSRunLoop *runloop = [NSRunLoop currentRunLoop];
    DOClient *client = [[DOClient alloc] init];
    [client connect];
    [client doTest];
   
    [runloop run];
    [client release];
    [pool release];
    exit(0);
}