`
zxs19861202
  • 浏览: 908850 次
  • 性别: 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

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

    iOS socket编程

    iOS socket编程 asyncsocket

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

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

    ios-Socket.zip

    单例封装AsyncSocket

    iOS AsyncSocket客户端与服务器

    模拟Socket通信过程,包含了本地客户端及服务器,其中SocketServe为服务器端,StencilSocketController为客户端

    ios-Socket通信.zip

    通过AsyncSocket封装的Socket通讯方法,简单实用,通俗易懂,初学者不能错过

    iOS socket的的调用

    代码的socket是用了第三方库AsyncSocket实现的,有两个demo在里面,一个接受端的和发送端的Socket。

    IOS AsyncSocket API

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

    AsyncSocket IOS

    AsyncSocket是一个用Object-c封装好的网络通讯API,调用方便,容易实现 使用AsyncSocket可以很方便的与其它系统进行Socket通信.

    iOS_Socket_即时通讯Demo

    iOS客户端和服务器,基于AsyncSocket, 相互通信、即时通讯

    iOS_Socket_Demo

    基于AsyncSocket, iOS客户端和服务器,相互通信

    Socket Client

    用IOS AsyncSocket编码ios设备间进行网络通信,客户端代码

    ios tcp和udp的socket第三方封装类库

    主要使用到asyncsocket(tcp协议)和asyncudpsocket(udp协议),使用了ARC,如果需要非ARC的可以对该文件禁用arc。内含使用例子,客户端和服务器端都有。暂时最新的了。 (资源分1分,需要拿回分数的评论即可,无需...

    AsyncSocket服务器客户端

    使用AsyncSocket类库实现简单的 tcp socket 服务器/客户端 两台ios设备,可以发送数据

    Cocoa AsyncSocket

    cocoa asyncsocket 最新下载的开源库,方便大家下载使用啊。

    AsyncSocket

    这是7.0.x版本的asyncsocket

    CocoaAsyncSocket

    IOS Socket使用CocoaAsyncSocket开源框架开发socket编程

    AsyncSocketDemo

    简单介绍一下对AsyncSocket使用.一般来说,一个用户只需要建立一个socket长连接,所以可以用单例类方便使用。###定义单列类:LGSocketServeLGSocketServe.h//// LGSocketServe.h// AsyncSocketDemo//// Created by ...

Global site tag (gtag.js) - Google Analytics