を使用して、同じコンピューター上の 2 つのアプリケーション間の接続を作成しようとしていますが、NSSocketPort一方向にしか機能していないようです。NSMutableDictionaryを作成して として設定するサーバーがありますrootObject。rootProxyクライアントは、サーバーが作成した辞書を読み取り、辞書を取得します。しかし、クライアントに追加のキー/値セットを辞書に追加して、辞書をrootObject再度設定してもらいたいと思います。しかし、サーバーは、クライアントが設定した後に設定された最後の値/キーを受信していないようです。
サーバ:
self.portRecv = [[NSSocketPort alloc] initWithTCPPort:30028];
self.conn = [NSConnection connectionWithReceivePort:self.portRecv sendPort:nil];
self.data = [NSMutableDictionary dictionary];
[self.data setObject:@"Value" forKey:@"serverSet"];
self.conn.rootObject = self.data;
self.conn.delegate = self;
これは、サーバーが値を読み取る方法です。
self.data = (NSMutableDictionary*)[self.conn rootProxy];
クライアント:
self.portSend = [[NSSocketPort alloc] initRemoteWithTCPPort:30028 host:@"127.0.0.1"];
self.conn = [NSConnection connectionWithReceivePort:nil sendPort:self.portSend];
self.conn.delegate = self;
self.data = (NSMutableDictionary*)[self.conn rootProxy];
[self.data setObject:@"Value" forKey:@"clientSet"];
self.conn.rootObject = self.data;
クライアントは問題なくself.data受信しますが、クライアントが設定し"serverSet : Value"た後にサーバーに を読み取らせると、サーバーはではなく値を持つ辞書を取得します。[self.conn rootProxy]"clientSet : Value"serverSetclientSet
私は以下のようにデリゲートメッセージに答えています:
- (BOOL)makeNewConnection:(NSConnection *)conn sender:(NSConnection *)ancestor
{
return YES;
}
- (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)conn
{
return YES;
}
- (BOOL)connection:(NSConnection *)conn handleRequest:(NSDistantObjectRequest *)doReq
{
NSInvocation *invocation = [doReq invocation];
[invocation invoke];
if ([invocation selector] == @selector(entitiesByName))
{
id retVal;
[invocation getReturnValue:&retVal];
NSDictionary *rebuilt = [NSDictionary dictionaryWithDictionary:retVal];
[invocation setReturnValue:&rebuilt];
}
[doReq replyWithException:nil];
return YES;
}
rootObject値を追加してサーバーに返すことはできませんか? どうやってやるの?