簡體   English   中英

MAC OS X上的客戶端獲得空響應(使用BSD套接字和Cocoa的NSFileHandle)

[英]client side on MAC OS X gets empty responses (using BSD sockets and Cocoa's NSFileHandle)

我正在使用bsd套接字連接linux機器(充當服務器)和Mac機器(充當客戶端)。 由於Cocoa的改進,我以通常的方式設置bsd套接字,然后將其封裝在NSFileHandle對象上。 我正在使用該對象來發送和接收來自服務器的消息。

該協議如下:Linux從Mac收到一條消息,並立即將該消息回顯給Mac。

一切順利,直到我收到信息為止。 我的Mac收到的消息為空。

發送郵件時,這就是我的工作。

const char *toSend = [line cStringUsingEncoding:NSASCIIStringEncoding];
printf("message to send %s\n", toSend);
//[self writeData:[line dataUsingEncoding: encoding]];

[self writeData:[NSData dataWithBytes:toSend length:strlen(toSend)]];
[self readInBackgroundAndNotify];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:observer selector:@selector(process:) name:NSFileHandleReadCompletionNotification object:self];

如您所見,我在“觀察者”上設置了“過程”以處理服務器響應。 此方法執行以下操作。

NSFileHandle *fh = [notification object];
NSData *data = [fh availableData];
NSString *dataString = [[NSString alloc]
                        initWithData:data
                        encoding:NSASCIIStringEncoding];

printf("server says %s\n", [dataString cStringUsingEncoding:NSASCIIStringEncoding]);    
[dataString release];

在控制台上,我得到:“服務器說”,僅此而已

在Linux方面,我正在打印得到的內容,然后將其發送回去之前,請檢查是否有東西。

我知道我可以在Mac上使用bsd常規套接字,但我真的很想這么做。

在調用readInBackgroundAndNotify之前不應該添加觀察者嗎? 您的消息可以在過程完成時被讀取和消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM