iOS socket Stream 服务器端 及 客户端 演示

iOS socket Stream

测试环境,mac osx 10.8

一:建立服务器端

由于mac osx10.8 已经集成 python2和 Twisted,我们可以直接利用此,构建一个简单的socket 服务器

如下测试一个简单的聊天 socket

并,定义,加入聊天时发送:iam:用户名

发送信息时:msg:信息

终端:vim server.py  回车,copy入如下代码


from twisted.internet.protocol import Factory, Protocol
from twisted.internet import reactor

class IphoneChat(Protocol):
def connectionMade(self):
self.factory.clients.append(self)
print "clients are ", self.factory.clients

def connectionLost(self, reason):
self.factory.clients.remove(self)

def dataReceived(self, data):
a = data.split(‘:‘)
print a
if len(a) > 1:
command = a[0]
content = a[1]

msg = ""
if command == "iam":
self.name = content
msg = self.name + " has joined"

elif command == "msg":
msg = self.name + ": " + content
print msg

for c in self.factory.clients:
c.message(msg)

def message(self, message):
self.transport.write(message + ‘\n‘)

factory = Factory()
factory.clients = []
factory.protocol = IphoneChat
reactor.listenTCP(80, factory)
print "Iphone Chat server started"
reactor.run()

上面 server.py建立好之后

在终端:sudo python server.py   开启服务器 看到  Iphone Chat server started
,开启成功;

二:终端测试服务器

1:在上面服务器开启成功之后;

2:打开另一个终端:telnet localhost 80 回车,即可看到 socket 连接成功;Connected to
localhost.

3: 在终端里面输入测试信息:iam:cc 回车; msg:hi   回车;即可以两个终端下看到实时的信息传递情况;

4:再新建立一个终端:telnet localhost 80 即可实现,多个client 连接 服务器 socket

三:在iOS 端建立 socket 连接 client

1:先建立两个实例变量,并实现代理

@interface ViewController : UIViewController<NSStreamDelegate>

{
NSInputStream *inputStream;
NSOutputStream *outputStream;
}

@end

2:建立 socket 与本地 socket 服务器

- (void)initNetworkCommunication
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 80, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;

[inputStream setDelegate:self];
[outputStream setDelegate:self];

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[inputStream open];
[outputStream open];

}


View
Code

3:测试加入聊天和发送聊天

- (void)joinChatServer
{
NSString *name=@"cc";
NSString *response = [NSString stringWithFormat:@"iam:%@",name];
NSData *data = [[NSData alloc]initWithData:[response dataUsingEncoding:NSUTF8StringEncoding]];

[outputStream write:[data bytes] maxLength:[data length]];

}

- (void)sendMesage
{
NSString *mess=@"hello world";
NSString *response = [NSString stringWithFormat:@"msg:%@",mess];
NSData *data = [[NSData alloc]initWithData:[response dataUsingEncoding:NSUTF8StringEncoding]];

[outputStream write:[data bytes] maxLength:[data length]];
}

4:在代理中接收socket传递的信息

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {

switch (streamEvent) {

case NSStreamEventOpenCompleted:
NSLog(@"Stream opened");
break;

case NSStreamEventHasBytesAvailable:
if (theStream == inputStream) {

uint8_t buffer[1024];
int len;

while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {

NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];

if (nil != output) {
NSLog(@"server said: %@", output);
}
}
}
}
break;

case NSStreamEventErrorOccurred:
NSLog(@"Can not connect to the host!");
break;

case NSStreamEventEndEncountered:
break;

default:
NSLog(@"Unknown event");
}

}

四:参考:

http://www.raywenderlich.com/3932/networking-tutorial-for-ios-how-to-create-a-socket-based-iphone-app-and-server

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/UsingSocketsandSocketStreams.html

http://www.cnblogs.com/kesalin/archive/2013/04/14/ios_cfnetwork.html

https://developer.apple.com/library/ios/qa/qa1652/_index.html

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html

iOS socket Stream 服务器端 及 客户端 演示,布布扣,bubuko.com

时间: 2024-10-07 18:34:38

iOS socket Stream 服务器端 及 客户端 演示的相关文章

IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端

这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 读者可以在github下载框架源码 https://github.com/robbiehanson/CocoaAsyncSocket 下载后,可以看到在Examples下面可以看到很多例子,如果读者自学能力高,可以略过下面的文章. 2.开始使用 1)在 \Source\GCD 目录下,我们可以看到G

Socket(套接字)在服务器端和客户端之间的基本工作原理

Socket之间的连接过程主要可以概括为以下三步: 服务器建立监听:客户端初始化Socket动态库后创建套接字,然后指定客户端Socket的地址,循环绑定Socket直至成功,然后开始建立监听,此时客户端处于等待状态,实时监控网络状态: 客户端提出请求:客户端的Socket向服务器端提出连接请求,此时客户端描述出它所要连接的Socket,指出要连接的Socket的相关属性,然后向服务器端Socket提出请求: 连接确认并建立:当服务器端套接字监听到来自客户端的连接请求之后,立即响应请求并建立一个

iOS socket网络编程

代码下载 服务端代码下载地址 客户端代码下载地址 相关概念 socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等.socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议.Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口. socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦

iOS socket 笔记

ios 客服端: 下载 AsyncSocket 开发框架,拖到项目中 //建立 #import "ViewController.h" #import <sys/socket.h> #import <netinet/in.h> #import <arpa/inet.h> #import <unistd.h> #import "AsyncSocket.h" #define DEVW [[UIScreen mainScree

使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图.下面就来看看本文实现的功能: Silverlight 与服务器利用Socket通讯,实时从服务器获取数据(本文中的数据是地理坐标),由于没有GPS,所以本文在服务器写了一个构造新坐标的函数(本文是一个三角函数),然后利用Timer组件,实时调用,得到新的坐标,并将新的坐标发送给客户端,客户端接收到发

MAC OS/IOS Socket编程之AsyncSocket

最近在做越狱状态下的IOS后台监控软件,后台守护进程将取得的数据通过TCP发送到服务器,通过查阅资料了解到IOSsocket编程推荐使用公开的类库AsyncSocket,使用该类库极大的方便了socket的操作,下面开始介绍. 1.Socket简介 socket是应用层与TCP/IP协议簇通信的中间软件抽象层,它是一组接口.Socket描述了一个IP.端口对,它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息.所以,Socket一定包含了通信的

iOS socket 使用与原理

socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口. 多 个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,计算机操作系统为应用程序与TCP/IP 协议交互提供了套接字(Socket)接口.应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输

iOS Socket介绍及其简单应用

socket,究竟是什么东东,面试时,笔试有他,面试也有他,如果做智能硬件,肯定会用到socket,所以,今天带大家回顾一下socket: 一.介绍:Socket:是应?层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是 一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接?后面:例: 你要打电话给?个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了.等交流结束,挂断电话结束此次交谈. 建立连接步骤:先从服

iOS Socket理论知识

iOS Socket理论知识 序言 网络七层由下往上分别为物理层.数据链路层.网路层.传输层.会话层.表示层和应用层.其中物理层.数据链路层和网络层通常被称作媒体称,是网络工程师所研究的对象;传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议对应与应用层 TCP/UDP协议对应于传输层 IP协议对应于网络层 三者本质上没有可比性.何况HTTP协议是基于TCP连接的.TCP/IP是传输层协议,主要解决数据如何在网络中传输:而HTTP是应用层协议,主要解决如何包装