`
zxs19861202
  • 浏览: 916010 次
  • 性别: Icon_minigender_1
  • 来自: 湖北—》上海
社区版块
存档分类
最新评论

ios socket AsyncSocket使用

    博客分类:
  • ios
阅读更多

一.项目添加ASyncSocket

  1.下载ASyncSocket库源码

  2.把ASyncSocket库源码加入项目(见附件)

  3.在项目增加CFNetwork框架

 

 

二、具体使用代码如下:

导入:#import "AsyncSocket.h"

 

//发送短消息

-(IBAction)sendString

{

    

   

    NSData *data = [@"test\n" dataUsingEncoding: NSUTF8StringEncoding];

    

    

    static BOOL connectOK = NO

    

    if (!_sendSocket)

    {

        self.sendSocket = [[AsyncSocket alloc] initWithDelegate: self];

        

        NSError *error;

        connectOK = [_sendSocket connectToHost: @"127.0.0.1" onPort: 8000 error: &error];

        

        if (!connectOK)

        {

            [self showAlert:@"连接失败"];

        }else{

            DLog(@"connect success!");

        }

        

        [_sendSocket setRunLoopModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];

    }

    

    if (connectOK)

    {

        [_sendSocket writeData:data withTimeout: -1 tag: 0];

    }

}

 

 

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port

{

DLog(@"%s %d", __FUNCTION__, __LINE__);

    

    [_sendSocket readDataWithTimeout: -1 tag: 0];

}

 

- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag

{

    DLog(@"%s %d, tag = %ld", __FUNCTION__, __LINE__, tag);

    

    [_sendSocket readDataWithTimeout: -1 tag: 0];

}

 

- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err

{

   DLog(@"%s %d, tag = %@", __FUNCTION__, __LINE__, err);

}

 

// 这里必须要使用流式数据

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag

{

    

    NSString *msg = [[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding];

    

    DLog(@"%s %d, ==读取到从服务端返回的内容=== %@", __FUNCTION__, __LINE__, msg);

    

    [_sendSocket readDataWithTimeout: -1 tag: 0];

}

 

 

- (void)onSocketDidDisconnect:(AsyncSocket *)sock

{

    DLog(@"%s %d", __FUNCTION__, __LINE__);

    

    self.sendSocket = nil;

 

}

 

 

java服务端的代码如下:

 

public class Server {

 

 

    private ServerSocket ss;  

    private Socket socket;  

    private BufferedReader in;  

    private PrintWriter out;  

  

    public Server()   

    {  

        try   

        {  

            ss = new ServerSocket(8000);  

              

            System.out.println("The server is waiting your input...");  

              

            while(true)   

            {  

                socket = ss.accept();  

                  

                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  

                out = new PrintWriter(socket.getOutputStream(), true);  

                String line = in.readLine();  

                  

                System.out.println("you input is : " + line);  

                                  

                out.println("server back input is :" + line); 

                out.flush();

                  

                out.close();  

                in.close();  

                socket.close();  

                  

                if(line.equals("exit"))  

                    break;  

            }  

              

            ss.close();  

              

        } catch (IOException e) {  

            e.printStackTrace();  

        }  

    }  

  

    public static void main(String[] args)   

    {  

        new Server();  

    }  

 

 

 

}

 

 

注意:向客户端写数据时最后需要加上\n,不然很久都不会得到服务端的返回。

 

上面为普通的socket服务端,最近项目采用apache mina框架建后台的socket服务端,采用上面的asyncSocket一直连接不上服务器,也在网上查询了大量的资料,最终发现需要在写入的数据后面加上0字符才能连接成功,或者采用gzip压缩后再传入服务器。ios的gzip压缩请见下一博客。

 

NSString *requestStrFrmt =  @"发送到服务端数据";

 

 

NSData *requestData = [requestStrFrmt dataUsingEncoding:NSUTF8StringEncoding];

    

    Byte *testByte = (Byte *)[requestData bytes];

    

    Byte bytes[requestData.length+1];

    for(int i=0;i<[requestData length];i++){

        bytes[i]=testByte[i];

    }

    bytes[requestData.length]=0;

    

    

    NSData *adata = [[NSData alloc] initWithBytes:bytes length:requestData.length+1];

 

 

[asyncSocketwriteData:adata withTimeout:-1.0tag:0];

 

这样服务端就能正常的读取到数据并返回了

 

分享到:
评论
1 楼 duanyutian 2015-02-12  
大神 我加0 或者\n都没有用  和mina的通信有没有注意点啊?

相关推荐

    iOS 基于AsyncSocket的二次开发

    在iOS开发中,网络通信是应用的核心功能之一,而AsyncSocket库是Objective-C编写的一个强大的TCP套接字通信框架。本文将深入探讨基于AsyncSocket进行二次开发的关键知识点,包括其基本概念、工作原理、核心API以及...

    IOS AsyncSocket

    使用AsyncSocket可以很方便的与其它系统进行Socket通信, AsyncSocket包括TCP和UDP,通过实现委托AsyncSocketDelegate进行交互。 首先,调用此API时需先引入CFNetWork.framework 然后在#import "AsyncSocket.h"就...

    iOS socket通讯用以上传以及下载文件

    在iOS中,通常会使用CocoaAsyncSocket库来简化Socket编程,正如压缩包中的文件"AsyncSocket"所示。CocoaAsyncSocket是由Dean Wombourne开发的一个强大的Objective-C类库,它封装了低级别的Socket API,提供了异步...

    iOS AsyncSocket客户端与服务器

    AsyncSocket是一个强大的Objective-C库,它简化了在iOS平台上使用Cocoa进行TCP套接字编程的过程。本文将深入探讨如何利用AsyncSocket库构建一个简单的iOS客户端与服务器的通信系统。 首先,我们要了解Socket的基本...

    iOS socket编程

    iOS socket编程 asyncsocket

    ios-Socket通信.zip

    "ios-Socket通信.zip"这个压缩包可能包含了关于如何在iOS平台上使用AsyncSocket库进行Socket通信的示例代码和教程。AsyncSocket是由GCD(Grand Central Dispatch)实现的一个异步Socket库,它简化了Socket编程的复杂...

    ios-Socket.zip

    通过这种方式,我们可以轻松地在iOS应用中使用AsyncSocket进行网络通信,而无需关心Socket的底层细节。这个封装不仅提高了代码的复用性,也降低了开发难度,使开发者能更专注于业务逻辑的实现。

    ios AsyncSocket IOS套接字开发 第三方工具

    在iOS中,使用AsyncSocket创建TCP服务器和客户端的基本步骤如下: 1. 引入库:首先,你需要将AsyncSocket库添加到你的项目中,可以通过CocoaPods或者手动导入库文件。 2. 初始化:在你的类中引入`AsyncSocket.h`...

    ios使用socket的例子

    本文将详细解析标题为“ios使用socket的例子”的知识点,并基于提供的压缩包文件`robbiehanson-CocoaAsyncSocket-fe662b3`进行讲解。 CocoaAsyncSocket是由Robbie Hanson开发的一个Objective-C库,它为iOS和macOS...

    iOS应用中使用AsyncSocket库处理Socket通信的用法讲解

    在iOS开发中使用socket,一般都是用第三方库AsyncSocket,不得不承认这个库确实很强大。下载地址CocoaAsyncSocket 。 特性 AsyncSocket类是支持TCP的。 AsyncUdpSocket是支持UDP的。 AsyncSocket是封装了CFSocket和...

    iOS socket的的调用

    本知识点将深入探讨如何使用第三方库AsyncSocket实现iOS中的Socket通信,以及如何通过提供的两个demo理解Socket的工作原理。 AsyncSocket是由CocoaAsyncSocket项目提供的一个强大的Objective-C类,它简化了iOS和Mac...

    iPhone的Socket编程使用开源代码之AsyncSocket

    总之,`AsyncSocket`是一个强大的工具,可以帮助iOS开发者高效、便捷地进行Socket编程。通过学习和掌握这个库,你可以创建出更加健壮、响应迅速的网络应用程序。记得参考`Reference_AsyncSocket.htm`中的文档,以...

    AsyncSocket IOS

    AsyncSocket是iOS平台上一个强大的Objective-C库,专为简化Socket通信而设计。它提供了一种高效、易用的方式来实现客户端和服务器之间的低级网络通信。这个库由Jon Reid开发,并在开源社区中广受欢迎,因为它封装了...

    iOS_Socket_即时通讯Demo

    在iOS中,通常使用BSD Socket API来创建和管理Socket连接。 1. **创建Socket连接**: - iOS客户端首先需要初始化一个Socket实例,通过`CFStreamCreatePairWithSocketToHost()`函数创建到服务器的TCP连接。 - 连接...

    iOS_Socket_Demo

    本示例"iOS_Socket_Demo"主要展示了如何使用AsyncSocket库在iOS平台上构建一个客户端和服务器,实现两者之间的实时数据交换。 首先,我们要理解什么是Socket。Socket是操作系统提供的一个接口,它允许应用程序通过...

    利用AsyncSocket与后台数据交互

    使用`AsyncSocket`首先需要创建一个socket实例,然后调用`connectToHost:onPort:`方法,传入服务器的主机名和端口号。这个过程是异步的,当连接成功或失败时,会触发相应的委托方法。 3. **委托方法**: - `- ...

    AsyncSocket

    5. **易于使用**:AsyncSocket通过简单的API设计,使得开发者能够轻松地集成到项目中。例如,`readDataToLength:`和`writeData:`方法用于读写特定长度的数据,`onSocket:didReadData:withTag:`和`onSocket:...

    IOS AsyncSocket API

    使用AsyncSocket可以很方便的与其它系统进行Socket通信, AsyncSocket包括TCP和UDP,通过实现委托AsyncSocketDelegate进行交互。 首先,调用此API时需先引入CFNetWork.framework 然后在#import "AsyncSocket.h"就可以...

Global site tag (gtag.js) - Google Analytics