iOS 简单的socket

本文介绍如何使用AsyncSocket创建服务端与客户端,并实现基本的消息收发功能。服务端监听指定端口,客户端连接服务端指定IP及端口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Server

 

(不需要制定IP)

但是需要指定端口


#import <Cocoa/Cocoa.h>

#import "AsyncSocket.h"

@interface AppDelegate :NSObject <NSApplicationDelegate>

{

   AsyncSocket  *_listenSocket;    

}

@end


.M

   //开启监听

    _listenSocket = [[AsyncSocketalloc] initWithDelegate: self];

   //监听

    if([_listenSocketacceptOnPort:12345error:nil])

    {

        [textViewsetText:@"服务开启\n"];

    }


//接到socket

- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket

{

    //socket保存引用  或者再顶一个 socket来保存它

    [socketArrayaddObject:newSocket];

    //接受消息

    [sock readDataWithTimeout: -1tag: 0];

}


====================================================

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

{

// NSLog(@"%s %d", __FUNCTION__, __LINE__);

       NSString *welcomeMsg =@"welcome to Server\r\n";

NSData *welcomeData = [welcomeMsgdataUsingEncoding:NSUTF8StringEncoding];

[sockwriteData:welcomeData withTimeout:-1 tag:0];

        [sock readDataWithTimeout: -1tag: 0];

}


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

{

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

    //接收消息

    [sock readDataWithTimeout: -1tag: 0];

}


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

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

{

    NSString *msg = [[[NSStringalloc] initWithData: dataencoding:NSUTF8StringEncoding]autorelease];


   // NSLog(@"%s %d, msg = %@", __FUNCTION__, __LINE__, msg);

   NSString *str = [NSStringstringWithFormat:@"receive%@\n%@",msg,textView.text];

    [textViewsetText:str];

    [sock readDataWithTimeout: -1tag: 0];

}




Client

.h

  AsyncSocket  *_sendSocket;


.m

#define SERVER_IP    @"192.168.11.64"

//#define SERVER_IP    @"127.0.0.1"


#define SERVER_PORT  54321




     //连接到服务器


     _sendSocket = [[[AsyncSocketalloc] initWithDelegate: self] autorelease];


       NSError *error;

        connectOK = [_sendSocketconnectToHost: SERVER_IPonPort: SERVER_PORTerror: &error];


       if (!connectOK)

        {

           NSLog(@"connect error: %@", error);

        }

       else

       {

            NSLog(@"connected");

        }

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

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

{

    NSString *msg = [[[NSStringalloc] initWithData: dataencoding:NSUTF8StringEncoding]autorelease];


   // NSLog(@"%s %d, msg = %@", __FUNCTION__, __LINE__, msg);

   NSString *str = [NSStringstringWithFormat:@"收到:%@\n%@",msg,textView.text];

    [textViewsetText:str];

    [sock readDataWithTimeout: -1tag: 0];

}



//////////////////////////////////////////////////////////////////////////////////////////

 发消息


        NSString *welcomeMsg =@"welcome to Server\r\n";

NSData *welcomeData = [welcomeMsgdataUsingEncoding:NSUTF8StringEncoding];

[sockwriteData:welcomeData withTimeout:-1 tag:0];

发完消息后要及时接收消息

 

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

{

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

    //及时接受

    [sock readDataWithTimeout: -1tag: 0];

}



 接受消息
       在didReadData里面

      NSString *msg = [[[NSStringalloc] initWithData: dataencoding:NSUTF8StringEncoding]autorelease];


   // NSLog(@"%s %d, msg = %@", __FUNCTION__, __LINE__, msg);

   NSString *str = [NSStringstringWithFormat:@"收到:%@\n%@",msg,textView.text];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值