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", , &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]; }
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[];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > ) {
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.cnblogs.com/kesalin/archive/2013/04/14/ios_cfnetwork.html
https://developer.apple.com/library/ios/qa/qa1652/_index.html
iOS socket Stream 服务器端 及 客户端 演示的更多相关文章
- C#线程池多线程Socket通讯 服务器端和客户端示例
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; ...
- Java中使用Socket实现服务器端和客户端通讯
创建服务器端serverSocket import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
- Windows10 VS2017 C++ Server Socket简单服务器端与客户端
服务端: #include "pch.h" #include<iostream> #include<WinSock2.h> #include <Ws2 ...
- 计算机网络:套接字(Socket)| Python socket实现服务器端与客户端通信,使用TCP socket阿里云ECS服务器与本机通信
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制.从所处的地位来讲,套接字上联应 ...
- IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端
这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 ...
- IOS Socket 05-XMPP开始&安装服务器openfire&安装配置客户端
1. 即时通讯技术简介(IM) 即时通讯技术(IM-Instant Messageing)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方 ...
- Socket(套接字)在服务器端和客户端之间的基本工作原理
Socket之间的连接过程主要可以概括为以下三步: 服务器建立监听:客户端初始化Socket动态库后创建套接字,然后指定客户端Socket的地址,循环绑定Socket直至成功,然后开始建立监听,此时客 ...
- iOS socket 笔记
ios 客服端: 下载 AsyncSocket 开发框架,拖到项目中 //建立 #import "ViewController.h" #import <sys/socket. ...
- IOS Socket 03-建立连接与登录
1. 搭建python服务器 这里我们用到python服务器Socket Server.如何运行Server?下面介绍 1)通过百度云下载文件 http://pan.baidu.com/s/1i5yb ...
随机推荐
- 详解Ubuntu Server下启动/停止/重启MySQL数据库的三种方式(ubuntu 16.04)
启动mysql: 方式一:sudo /etc/init.d/mysql start 方式二:sudo service mysql start 停止mysql: 方式一:sudo /etc/init.d ...
- codevs 2181 田忌赛马
2181 田忌赛马 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 中国古代的历史故事“田忌赛马”是为大家所熟知的.话说齐王 ...
- [HNOI2008]玩具装箱TOY --- DP + 斜率优化 / 决策单调性
[HNOI2008]玩具装箱TOY 题目描述: P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京. 他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器 ...
- MySQL注射绕过技巧
本次对以前注入的一些总结. 总有在注入的时候发现有waf或者对参数过滤了 ~~ 做个文章记录下思路吧 ①.通过greatest函数绕过不能使用大小于符号的情况 我们在猜解单个字符时 通常会判断字符 ...
- bzoj 1780
这是一道环上的问题,我们先将一个环展开,再复制一次. 这样,任何一个合法方案一定对应在转换后的序列的一些连续的区间,使得它们的并的长度大于等于圈长. 然后,我们将区间合并一下(就是将一些被其他区间包含 ...
- PHPredis长连接pconnect
1. 当使用pconnect时,连接会被重用,连接的生命周期是fpm进程的生命周期,而非一次php的执行. 疑惑1: fpm进程的生命周期是指 当前那个还是指所有: php-fpm通常是1个ma ...
- [转]Activity详解 Intent显式跳转和隐式跳转
Activity 生命周期 显式 Intent 调用 1 //创建一个显式的 Intent 对象(方法一:在构造函数中指定) 2 Inte ...
- 【原】【Git】EGit强制覆盖本地文件
今天带来的是EGit使用中有时会用到的一个技巧,强制覆盖本地.EGit强制覆盖远端(其实没有这个说法),在另一篇文章中写了http://www.cnblogs.com/guodongdidi/p/48 ...
- mui 图片预览
1. 图片放大滑动预览需要 mui.zoom.js mui.previewimage.js 2. 调用 mui.previewImage(); 3. 滑动过程中禁止图片缩放 注释掉下面代 ...
- springMvc的一些简介 和基于xml的handlerMapping基本流程
其它步骤就不在介绍了 在大多数情况,都会使用基于annotation的方式进行HandlerMapping处理,在这里基于对这个流程的了解,就采用了基于xml配置了一个HandlerMapping & ...