【网络编程】Socket概念及简单聊天…
* Socket就是为网络服务提供的一种机制


//1.建立一个连接
NSString*host = @"127.0.0.1";
;
CFReadStreamRefreadStream;
//输入流
CFWriteStreamRefwriteStream;
//输出流
CFStreamCreatePairWithSocketToHost(NULL,(__bridgeCFStringRef)host,port, &readStream, &writeStream);
// 将C语言输入输出流转换成OC对象
_inputStream= (__bridgeNSInputStream*)(readStream);
_outputStream= (__bridgeNSOutputStream*)(writeStream);
//
设置代理
_inputStream.delegate=self;
_outputStream.delegate=self;
//把输入输出流添加到主运行循环
//不添加的话代理可能不被调用
[_inputStreamscheduleInRunLoop:[NSRunLoopmainRunLoop]forMode:NSDefaultRunLoopMode];
[_outputStreamscheduleInRunLoop:[NSRunLoopmainRunLoop]forMode:NSDefaultRunLoopMode];
//
打开输入输出流
[_inputStream
open];
[_outputStream
open];
- (void)stream:(NSStream*)aStream handleEvent:(NSStreamEvent)eventCode
{
NSLog(@"%@",aStream);
// NSStreamEventOpenCompleted = 1UL << 0,
流打开成功
// NSStreamEventHasBytesAvailable = 1UL << 1,
有字节可读
// NSStreamEventHasSpaceAvailable = 1UL << 2,
可以发送字节
// NSStreamEventErrorOccurred = 1UL << 3,
连接出错
// NSStreamEventEndEncountered = 1UL << 4
连接结束
switch(eventCode) {
caseNSStreamEventOpenCompleted:
NSLog(@"流打开成功");
break;
caseNSStreamEventHasBytesAvailable:
NSLog(@"有字节可读");
[selfreadData];
break;
caseNSStreamEventHasSpaceAvailable:
NSLog(@"可以发送字节");
break;
caseNSStreamEventErrorOccurred:
NSLog(@"连接出错");
break;
caseNSStreamEventEndEncountered:
NSLog(@"连接结束");
//关闭输入输出流
[_inputStreamclose];
[_outputStreamclose];
//从主运行循环移除
[_inputStreamremoveFromRunLoop:[NSRunLoopmainRunLoop]forMode:NSDefaultRunLoopMode];
[_outputStreamremoveFromRunLoop:[NSRunLoopmainRunLoop]forMode:NSDefaultRunLoopMode];
break;
default:
break;
}
}
- (void)login
{
// 2.聊天
// 2.1登录
//
发送用户名
//
登录指令
NSString*loginStr =
@"iam:zhangsan";
//
把Str转成NSData
NSData*data= [loginStr dataUsingEncoding:NSUTF8StringEncoding];
[_outputStreamwrite:data.bytesmaxLength:data.length];
}
#pragma mark 读了服务器返回的数据
-(void)readData{
//建立一个缓冲区可以放1024个字节
];
// 返回实际装的字节数
NSIntegerlen = [_inputStreamread:bufmaxLength:sizeof(buf)];
//把字节数组转化成字符串
NSData*data = [NSDatadataWithBytes:buflength:len];
// 从服务器接收到的数据
NSString*recStr= [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"gdgdfgdf%@",recStr);
[selfreloadDataWithText:recStr];
}
-(BOOL)textFieldShouldReturn:(UITextField*)textField{
NSString*text = textField.text;
NSLog(@"%@",text);
//
聊天信息
NSString*msgStr = [NSStringstringWithFormat:@"msg:%@",text];
//把Str转成NSData
NSData*data= [msgStr dataUsingEncoding:NSUTF8StringEncoding];
//
刷新表格
[selfreloadDataWithText:msgStr];
//
发送数据
[_outputStreamwrite:data.bytesmaxLength:data.length];
//
发送完数据,清空textField
textField.text=
nil;
return
YES;
}
-(void)reloadDataWithText:(NSString*)text{
[self.chatMsgsaddObject:text];
[self.tableViewreloadData];
// 数据多,应该往上滚动
NSIndexPath*lastPath = [NSIndexPathindexPathForRow:self.chatMsgs.count-
];
[self.tableViewscrollToRowAtIndexPath:lastPathatScrollPosition:UITableViewScrollPositionBottomanimated:YES];
}
#pragma mark 表格的数据源
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{
return
self.chatMsgs.count;
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
staticNSString*ID =
@"Cell";
UITableViewCell*cell= [tableView dequeueReusableCellWithIdentifier:ID];
cell.textLabel.text=
self.chatMsgs[indexPath.row];
return cell;
}

【网络编程】Socket概念及简单聊天…的更多相关文章
- [转]C#网络编程(基本概念和操作) - Part.1
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part1.aspx 引言 C#网络编程系列文章计划简单地讲述 ...
- C#网络编程(基本概念和操作) - Part.1
引言 C#网络编程系列文章计划简单地讲述网络编程方面的基础知识,由于本人在这方面功力有限,所以只能提供一些初步的入门知识,希望能对刚开始学习的朋友提供一些帮助.如果想要更加深入的内容,可以参考相关书籍 ...
- python网络编程——socket基础篇
python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...
- 铁乐学Python_Day33_网络编程Socket模块1
铁乐学Python_Day33_网络编程Socket模块1 部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 理解socket Socket是应用层与TCP/IP协 ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- 【Hadoop离线基础总结】zookeeper的介绍以及集群环境搭建、网络编程和RPC的简单了解
ZooKeeper的介绍以及集群环境搭建.网络编程和RPC的简单了解 ZooKeeper介绍 概述 ZooKeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题.例如 ...
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
- linux网络编程-socket(37)
在编程的时候需要加上对应pthread开头的头文件,gcc编译的时候需要加了-lpthread选项 第三个参数是线程的入口参数,函数的参数是void*,返回值是void*,第四个参数传递给线程函数的参 ...
- Android 网络编程 Socket
1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...
随机推荐
- Linux安装配置tomcat
1.首先配置好jdk 查看java版本:java -verson 1.官网下载jdk 2.tar -zxvf xxxx.tar.gz 解压 3.配置环境变量 <1># vi /etc/ ...
- 想要提高网页转换率?试试这16 个UI 秘诀
优异的使用者介面(user interface,UI)让使用者用得顺心,从而提高转换率(conversion rate),换言之,好的UI在使用与销售层面上形成双赢.UI设计师Jakub Linows ...
- 脚本引用中的defer和async的用法和区别
之前的博客漫谈前端优化中的引用资源优化曾经提到过脚本引用异步设置defer.async,没有细说,这里展开一下,谈谈它们的作用和区别,先上张图来个针对没用过的小伙伴有个初始印象: 是的,就是在页面脚本 ...
- VUE2.0不可忽视的很多变化
今天使用webpack-sample初始一个vue-cli项目,在app.vue文件中添加了个钩子函数ready,可是ready内的事件一直不执行,检查了webpack文件和package.json也 ...
- IOS编程 图片缓存模块设计
手机客户端为什么会留存下来?而不是被一味的Wap替代掉?因为手机客户端有Wap无可替代的优势,就是自身较强的计算能力. 手机中不可避免的一环:图片缓存,在软件的整个运行过程中显得尤为重要. 先简单说一 ...
- 基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用
在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各 ...
- 【SQL】CLR聚合函数什么鬼
之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下. 一.杂项 ...
- linq 实现动态 orderby
class Pet { public string Name{get;set;} public int Age{get;set;} } void Main() { Pet[] pets = { }, ...
- C#写爬虫,版本V1.0
之前看了Sql Server中的基本数据类型,发现image这个类型还是比较特殊的. 于是乎就做了一个将图片以二进制流形式存储的程序http://www.cnblogs.com/JsonZhangAA ...
- 查看SQL Server多实例的版本
通过 select @@version 查看当前的 SQL Server 安装的版本: 结果返回的是 SQL Server 2008 R2 (SP1),可安装的明明是 SQL Server 2012 ...