を使用して、同じコンピューター上の 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"
serverSet
clientSet
私は以下のようにデリゲートメッセージに答えています:
- (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
値を追加してサーバーに返すことはできませんか? どうやってやるの?