http Socket长连接

文档:http://www.cocoachina.com/ios/20160602/16572.html



socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接,UDP连接同理。

使用第三方框架:CocoaAsyncSocket

不会写服务器,用Tomcat进行测试,只能测试到连接成功以及断开连接,而且真机环境下,可能因为网络环境原因也同样访问不了:

注意:读写数据时需要手动进行。

//-1表示没有time限制
    [self.socket writeData:[NSData data] withTimeout:-1 tag:0];
    [self.socket readDataWithTimeout:-1 tag:0];

- (IBAction)SocketConnection:(UIButton *)sender {
    //http://localhost:8080/
    NSString *host = @"10.1.1.33";
    int port = 8080;

    _socket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    NSError *error = nil;
    //[_socket connectToHost:host onPort:port error:&error ];
    [_socket connectToHost:host onPort:port withTimeout:15000000 error:&error];
    if (error) {
        NSLog(@"%@",error);
    }
}
-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{
    NSLog(@"%s,%@",__func__,@"连接成功");
}

-(void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{
    if (err) {
        NSLog(@"异常断开-%@",err);
    }else{
        NSLog(@"正常断开");
    }
}

-(void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{
    NSLog(@"写数据");
}

-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    NSLog(@"读数据");
}
时间: 2024-08-24 09:06:57

http Socket长连接的相关文章

socket长连接的用处与模块图 待续

维护socket长连接虽然很耗电,但是却有广泛的用途.如:网络电话,实时接单的应用等. 由于服务器域名固定,手机客户端的网络IP可能不断变更,服务器一般想主动找手机客户端想说声不容易.运营商发现手机经常不用网络时(大部分省份判断手机客户端最近30分钟内是否使用流量,来判断你的手机是否在用网络,若有流量就不把你IP分给别人),会把你的手机以前使用的IP分配给其它手机号,所有苹果把苹果手机网络定义为不稳定的网络,禁止发布的应用严重依赖网络的稳定性.所以服务和客户端只有建立可靠的socket长连接,每

基于netty框架的socket长连接负载均衡解决方案

socket通讯的单机瓶颈 物联网的项目socket使用方式有两种: 短连接的socket请求 维持socket长连接的请求 对于socket短链接来说就好比是http请求,请求服务器,服务器返回数据以后请求管道就关闭了,服务器与客户端的链接就释放了.但是对于socket长链接就不同了,当设备与服务器建立连接以后就要一直保持连接,或者说保持较长时间的链接,那么就会大量消耗服务器的资源.若存在大量的这样的请求以后服务器终究会受不了垮掉.通过对TcpClient/server最大连接数我们得知单机s

Socket 长连接 短连接 心跳 JAVA SOCKET编程

简单解释就是: 短连接:建立连接,发送数据包,关闭连接 长连接:建立连接,发送数据包,发送心跳包,发送数据包,发送心跳包,发送心跳包...... 所以又频繁的数据收发的话,短连接会频繁创建TCP连接,而对于长连接,则始终用的是同一个TCP连接 package com.tree.demo.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.n

Java实现Socket长连接和短连接

1概念 Socket:socket实际上是对TCP/IP进行的封装,我们可以使用socket套接字通过socket来传输.首先我们需要明白的一个概念就是通道,简单地说通道就是两个对端可以随时传输数据的信道.我么常说的所谓建立socket连接,也就是建立了客户端与服务器端的通道. 长短连接:显而易见,长连接也就是这个socket连接一直保持连接,也就是通道一直保持通畅,两个对端可以随时发送和接收数据:短连接就是我们发送一次或有限的几次,socket通道就被关闭了.首先,我们必须明白的是socket

Socket 长连接与短连接,心跳

长连接与短连接 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持. 短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,一般银行都使用短连接.  比如http的,只是连接.请求.关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接. 其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态. 长连接与短连接的操作过程 通常的

iOS后台如何保持socket长连接和数据传输

工程中使用tcp长连接来和服务端进行数据传输,在IOS平台上,由于苹果的后台机制,会有以下问题: 当程序退到后台的时候,所有线程被挂起,系统会回收所有的socket资源,那么socket连接就会被关闭,因此无法再进行数据的传输: 解决方法: 通过设置以下属性可以保持socket连接和数据的继续传输 1.需要在Info.plist文件中添加UIBackgroundModes中的VOIP键值: 2.设置流属性 CFReadStreamRef和CFWriteStreamRef通过如下方法设置kCFSt

Android网络编程Socket长连接

在实际的应用中客户端可能需要和服务器端保持长时间的通信,即服务器需要不断地读取客户端数据,并向客户端写入数据:客户端也需要不断地读取服务器数据,并向服务器写入数据. 简单实现代码如下: 1 public class MyServer { 2 //定义保存所有Socket的ArrayList 3 public staticArrayList socketList = newArrayList(); 4 5 public static voidmain(String[] args) throws I

Socket,长连接,消息推送,消息提醒,未读消息提醒,消息通知,未读消息通知

今天公司要搞个类似QQ空间的未读消息通知,于是想到用WebSocket长连接,搜索一些资料后,调试好久,还以为不行,结果发现是IIS版本的原因,我本地用的Win7的系统,是IIS6的,本地测试一直不行,后来查资料发现用这个WebSocket要IIS8,我直接放服务器上,测试就OK了,废话不多说,直接上代码.我用的MVC+EF的框架. 1.新建一个Controller,继承APIController [Description("消息")] public class MessageCont

Socket 长连接与短连接

长连接与短连接 Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议.Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口. 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,即"心跳". 短连接是指通信双方有数据交互时,就建立一个TCP

Java socket 长连接与短链接

 长连接是一旦一个客户端登陆上服务器,其与服务器之间的连接就不关闭,不管他们之间进行了多少次交易,直到客户端退出登陆或网络出现故障. 这种技术在联机交易系统实现有利于提高效率. 短连接是客户端每发一个请求就与服务器建立一个连接,交易完成后关闭连接,这种技术实现较长连接简单. 长:connect连上后不断开,进行多次收发操作. 短:每次都connect,完成任务后立即断开,下次重连. 一般都是accept后启动一个线程去处理,该线程中的处理大致如下 短连接: run(){ read