[英]Objective C Socket Server does not receive Java Socket Client Messages
我使用CocoaAsyncTask
在Objective C中創建了服務器,如果我從telnet既連接本地主機又連接同一網絡,則可以正常工作。
現在,我有一個Java客戶端,它可以與另一個Java服務器正常工作,並且無法通信。 服務器端未收到任何消息。
供參考,以下是Java客戶端代碼:
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("192.168.0.106",4353);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Enter message: ");
String msg = br.readLine();
if (msg != null && !msg.equals("bye"))
{
printWriter.println(msg);
}
else
{
break;
} } } catch (IOException e) {e.printStackTrace();} } }
和服務器的Objective C代碼:
...
[newSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:15.0 tag:0];
...
(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
dispatch_async(dispatch_get_main_queue(), ^{
@autoreleasepool {
DDLogInfo(@"data: %@", data);
NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length] - 2)];
DDLogInfo(@"Info: %@", strData);
NSString *msg = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
DDLogInfo(@"Info: %@", msg);
我們嘗試在末尾附加\\n
和\\r
,但沒有成功。
是什么原因導致這種誤通信?
問題出在服務器端,通過使用readDataToData
而不是readDataWithTimeout
從套接字接收數據。
最有可能的問題是行尾,因此庫不會將其作為行處理,因此不會為下一個數據調用該方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.