Sockets iOS应用程序和Android应用程序之间的TCP套接字通信

Sockets iOS应用程序和Android应用程序之间的TCP套接字通信,sockets,Sockets,iPhone上的iOS应用程序和三星Galaxy S3上的Android应用程序需要通过Wifi网络相互通信 我在iOS应用程序中使用CocoaAsyncSocket库,在Android应用程序中使用java.net.Socket ==iOS应用程序部分== - (void)socket:(GCDAsyncSocket *)sender didAcceptNewSocket:(GCDAsyncSocket *)newSocket { [clientSocketList addObject

iPhone上的iOS应用程序和三星Galaxy S3上的Android应用程序需要通过Wifi网络相互通信

我在iOS应用程序中使用CocoaAsyncSocket库,在Android应用程序中使用java.net.Socket

==iOS应用程序部分==

- (void)socket:(GCDAsyncSocket *)sender didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
    [clientSocketList addObject:newSocket];

    NSMutableDictionary *newClientInfo = [[NSMutableDictionary alloc] init];
    [newClientInfo setObject:@"0" forKey:@"status"];

    [clientInfoList addObject:newClientInfo];

    [newSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:0];
}
- (void) writeData:(NSData*)data to:(GCDAsyncSocket*)sock {
    NSMutableData *dataWithLine = [data mutableCopy];
    [dataWithLine appendData:[GCDAsyncSocket CRLFData]];

    [sock writeData:dataWithLine withTimeout:-1 tag:0];
}
==安卓部分==

public boolean connectServer() {
    try {
        socket = new Socket(SOMEIP, SOMEPORT);

        binaryInput = socket.getInputStream();
        this.input = new BufferedReader(new InputStreamReader(binaryInput));
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

    }
    catch(Exception e) {
        e.printStackTrace();
    }
    new Thread(new Runnable() {

        @Override
        public void run() {
            while(status != STATUS_STOPPED) {
                try {
                    String read = input.readLine();
                    //Doing stuff
                } catch (IOException e) {
                            e.printStackTrace();
                }
            }
        }
    }).start();
}

public void sendMessage(String message) {
    out.println(message);
}
在上面的代码中,iOS应用程序是服务器,Android应用程序是客户端

在上面的代码中,我打算做的是

Android应用程序发送消息,iOS应用程序接收消息。每条消息由新行字符标识。Android应用程序通过println方法发送消息,iOS应用程序接收消息,直到接收到CRLF新行字符

iOS应用程序发送消息,Android应用程序接收消息。每条消息由新行字符标识。iOS应用程序通过在末尾附加CRLF发送消息,Android应用程序通过readline方法接收消息

问题是当android应用程序发送消息时,iOS应用程序的didReceiveData委托不会被调用。有一点很清楚,iOS应用程序套接字在流媒体中找不到CRLF字符

我试图通过在真实数据后附加CRLF字节[0x0d,0x0a]从Android应用程序发送消息,但没有成功。

在Java/Android中,PrintWriter.println写入操作系统特定的换行符。CRLF是窗口换行符。在Android上,它使用LF。如果iOS读卡器只需要CRLF而不允许LF,则永远不会触发

要强制CRLF,请改用PrintWriter.print:


谢谢。实际的解决方案已经过时了。解决了!
public void sendMessage(String message) {
    out.print(message + "\r\n");
}