GCDAynscSocket简单使用-服务端

距离上次写《GCDAynscSocket简单使用-服务端》差不多一个月了,现在把服务端的介绍给补上。

服务端的介绍比较简单,因为服务端和客户端的接收和发送数据的方法是一样的,不同的地方在于服务端是开启一个服务被动的等待客户端的接入。所以只介绍一下如何开启和关闭服务。

1、开启服务

GCDAynscSocket封装的非常好了,大部分情况下我们只要调用它的接口就可以了。

开启服务可调用的方法:

/**

* Tells the socket to begin listening and accepting connections on the given port.

* When a connection is accepted, a new instance of GCDAsyncSocket will be spawned to handle it,

* and the socket:didAcceptNewSocket: delegate method will be invoked.

*

* The socket will listen on all available interfaces (e.g. wifi, ethernet, etc)

**/

- (BOOL)acceptOnPort:(uint16_t)port error:(NSError **)errPtr;

此方法绑定一个端口号port,  errPtr是错误变量,可通过该变量判断服务开启是否成功

// 定义一个标志位,用于判断当前服务是否开启

BOOL     isRunning;

/**

*  @brief   开启服务

*/

- (void)startServer

{

if (!isRunning)

{

[self initServer];

[_serverSocket readDataWithTimeout:-1 tag:0];

isRunning = YES;

}

}

/**

*  @brief   服务端初始化

*/

- (void)initServer

{

allClientArray = [NSMutableArray array];

dispatch_queue_t socketQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

_serverSocket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:socketQueue];

NSError *error = nil;

[_serverSocket acceptOnPort:_socketPort error:&error];

if (error != nil)

{

NSLog(@"error --> %@", error);

}

else

{

NSLog(@"server start...");

}

}

2、关闭服务

停止服务直接调用- (void)disconnect方法即可

/**

*  @brief   停止服务

*/

- (void)stopServer

{

if (isRunning)

{

[_serverSocket disconnect];

isRunning = NO;

NSLog(@"server stop...");

}

}

3、委托方法

在有客户端接入的服务器时,会调用下面三个委托方法:

/**

* This method is called immediately prior to socket:didAcceptNewSocket:.

* It optionally allows a listening socket to specify the socketQueue for a new accepted socket.

* If this method is not implemented, or returns NULL, the new accepted socket will create its own default queue.

*

* Since you cannot autorelease a dispatch_queue,

* this method uses the "new" prefix in its name to specify that the returned queue has been retained.

*

* Thus you could do something like this in the implementation:

* return dispatch_queue_create("MyQueue", NULL);

*

* If you are placing multiple sockets on the same queue,

* then care should be taken to increment the retain count each time this method is invoked.

*

* For example, your implementation might look something like this:

* dispatch_retain(myExistingQueue);

* return myExistingQueue;

**/

- (dispatch_queue_t)newSocketQueueForConnectionFromAddress:(NSData *)address onSocket:(GCDAsyncSocket *)sock

/**

* Called when a socket accepts a connection.

* Another socket is automatically spawned to handle it.

*

* You must retain the newSocket if you wish to handle the connection.

* Otherwise the newSocket instance will be released and the spawned connection will be closed.

*

* By default the new socket will have the same delegate and delegateQueue.

* You may, of course, change this at any time.

**/

- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket

/**

* Called when a socket connects and is ready for reading and writing.

* The host parameter will be an IP address, not a DNS name.

**/

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port;

客户端和服务端的代码比较简单,demo修改后我会上传,PS:目前还没发现可以上传的地方

时间: 2024-12-20 03:57:29

GCDAynscSocket简单使用-服务端的相关文章

socket编程,简单多线程服务端测试程序

socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.accept.recv.send等函数的介绍,今天写了一个CUI界面的测试程序(依赖MFC)作为补充.程序功能简介如下: 1:一个线程做监听用. 2:监听线程收到客户端连接后,创建新线程接收客户端数据.所有对客户端线程将加入容器,以便管理. 3:服务端打印所有客户端发来的信息. 4:服务端CUI界面输入数字

转:实现一个简单的服务端推送方案

原文来自于:http://blog.csdn.net/jiao_fuyou/article/details/17090355 客户端和服务端的交互有推和拉两种方式:如果是客户端拉的话,通常就是Polling:如果是服务端推的话,一般就是Comet,目前比较流行的Comet实现方式是Long Polling. 注:如果不清楚相关名词含义,可以参考:Browser 與 Server 持續同步的作法介紹. 先来看看Polling,它其实就是我们平常所说的轮询,大致如下所示: Polling 因为服务端

Netty实例-简单的服务端-客户端实现,注释详细

       书籍推荐:                                       实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503 Netty Server端实现 /** * * <p> * Netty Server Simple * </p> * * @author 卓轩 * @创建时间:2014年7月7日 * @version: V1.0 */ public class NettyServer

一个PHP写的简单webservice服务端+客户端

首先是服务端,服务端有一个主要的class组成:apiServer.php <?php /** * apiServer.php * * webservice主类 * * @filename apiServer.php * @version v1.0 * @update 2011-12-22 * @author homingway * @contact [email protected] * @package webservice */ define('API_AUTH_KEY', 'i8XsJb

JPush简单Java服务端案例实现

一.激光推送准备工作 1.注册极光推送开发者账号,创建应用: 2.完成推送设置,填写应用名提交生成安装包: 3.扫码安装简单的测试apk,查看应用信息会有AppKey和Master Secret用于推送. 二.java服务端 所需jar包和详细具体集成可以查看官方文档,这里只是实现了一个简单的通知或推送消息. import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cn.jiguang.common.resp.APIConn

C# 编写WCF简单的服务端与客户端

http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术.是Windows平台上开发分布式应用最佳的实践方式. 今天带如何一步一步实现WCF服务端与客户端的开发及基础讲解. 一.在Visual

windows socket 简单的服务端和客户端代码

客户端代码 //socket简单的客户端代码 #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #include <stdio.h> #include <string.h> #include <Windows.h> #include <WinSock2.h> #pragma comment(lib, "

Netty实例-简单的服务端-client实现,凝视具体

       书籍推荐:                                       实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503 w=unionnojs&f=http%3A%2F%2Fai.taobao.com%2Fauction%2Fedetail.htm%3Fe%3DNwfw%252Fe17lVwjmraEDZVrLn4D8gsQRSnlTCbL1Om%252BR1KLltG5xFicOdXrTUTgh9

简单配置服务端代理Tengine

刚刚说完Apache,接下来写一下tengine(nginx).tengine是建立在nginx上的开源软件,添加了一大堆feature,并且你可以使用自定义的内存管理,不管是作为前端代理,还是前端缓存,效果都是萌萌哒的. nginx和tengine略有差异,请查看官方Wiki.Tengine. ## 根据自己情况选择用户 user nobody; ## 建议设置机器CPU核心数目 worker_processes 1; ## 之前配置机器的时候设置过的打开数目 worker_rlimit_no