操作系统方面有关论文范文,与本科生毕业设计文规范,本科生文文献综述北京DOC相关论文答辩开场白
本论文是一篇操作系统方面有关论文答辩开场白,关于本科生毕业设计文规范,本科生文文献综述北京DOC相关在职研究生毕业论文范文。免费优秀的关于操作系统及信息化及电力线路方面论文范文资料,适合操作系统论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。
5;workStream,@synthesizefileStream等于_fileStream,
@synthesizebufferOffset等于_bufferOffset,
@synthesizebufferLimit等于_bufferLimit,
下面还要自定义一个缓存区,因为原有合成的缓存区不能编译,再定义发送的时机和文件路径,分别如下三个函数所示,它们相当于一种状态断言(一个断言本质上是写下程序员的假设,如果假设被违反,那表明有个严重的程序错误).我们断言发送时网络流不能为零,文件路径也不能为零,即不能没有路径,否则就是出错.
-(uint8_t*)buffer
{
returnself->,_buffer,
}
-(BOOL)isSending
{
return(self.workStream!等于nil),
}
-(void)_startSend:(NSString*)filePath
{
NSOutputStream*output,
BOOLsuccess,
assert(filePath!等于nil),
assert(self.workStream等于等于nil),//不能按键接连两次发送
assert(self.fileStream等于等于nil),//同上
在做了申明之后,我们开始打开将要发送的数据流:
self.fileStream等于[NSInputStreaminputStreamWithFileAtPath:filePath],
assert(self.fileStream!等于nil),
[self.fileStreamopen],
我们为接收器打开了一个数据流,等待发送,那就要先通过Bonjour(也称为零配置联网,能自动发现IP网络上的电脑,设备和服务)来找到接收器,在电路巡检中就是我们的服务器,然后执行数据流的异步操作,即发送(-sendDidStart).如下所示:
self.Service等于[[[NSNetServicealloc]initWithDomain:@"local."type:@"_x-SNSUpload._tcp."name:@"Test"]autorelease],
assert(self.Service!等于nil),
success等于[self.ServicegetInputStream:NULLoutputStream:&,output],
assert(success),
self.workStream等于output,
[outputrelease],
self.workStream.delegate等于self,
[self.workStreamscheduleInRunLoop:[NSRunLoopcurrentRunLoop]forMode:NSDefaultRunLoopMode],
[self.workStreamopen],
[self_sendDidStart],
}
当发送已经开始,就会有结束的时候,也就是数据发送完毕的时候,我们需要编一个停止发送的程序,告诉系统一个停止的状态.此时,需要把网络流,网络服务器和缓存区都誊空,如下:
-(void)_stopSendWithStatus:(NSString*)statusString
{
if(self.workStream!等于nil){
self.workStream.delegate等于nil,
[self.workStreamremoveFromRunLoop:[NSRunLoopcurrentRunLoop]forMode:NSDefaultRunLoopMode],
[self.workStreamclose],
self.workStream等于nil,
}
if(self.Service!等于nil){
[self.Servicestop],
self.Service等于nil,
}
if(self.fileStream!等于nil){
[self.fileStreamclose],
self.fileStream等于nil,
}
self.bufferOffset等于0,
self.bufferLimit等于0,
[self_sendDidStopWithStatus:statusString],
}
在上面我们已经申明了发送前和发送后的状态,现在到了关键的发送内容了.下面是我们的数据流发送的过程,这也是这个程序的关键部分:
-(void)stream:(NSStream*)aStreamhandleEvent:(NSStreamEvent)eventCode
//当事件发生时,数据流委托呼叫
{
#pragmaunused(aStream)
assert(aStream等于等于self.workStream),
在这个程序里,事件发生的可能性有很多种,比如连接成功或者失败,以及发送错误和正常的结束,所以我们用switch-case语句进行编程,如下:
switch(eventCode){
caseNSStreamEventOpenCompleted:{
[self_updateStatus:@"Openedconnection"],
}break,
caseNSStreamEventHasBytesAvailable:{
assert(NO),
}break,
caseNSStreamEventHasSpaceAvailable:{
[self_updateStatus:@"Sending"],
//如果我们没有数据缓存空间,去阅读下一个数据块
if(self.bufferOffset等于等于self.bufferLimit){
NSIntegerbytesRead,
bytesRead等于[self.fileStreamread:self.buffermaxLength:kSendBufferSize],
if(bytesRead等于等于-1){
[self_stopSendWithStatus:@"Filereaderror"],
}elseif(bytesRead等于等于0){
[self_stopSendWithStatus:nil],
}else{
self.bufferOffset等于0,
self.bufferLimit等于bytesRead,
}
}
//如果没有得到完整的数据,发送下一个数据块,如下:
if(self.bufferOffset!等于self.bufferLimit){
NSIntegerbytesWritten,
bytesWritten等于[self.workStreamwrite:&,self.buffer[self.bufferOffset]maxLength:self.bufferLimit-self.bufferOffset],
assert(bytesWritten!等于0),
if(bytesWritten等于等于-1){
[self_stopSendWithStatus:@"Networkwriteerror"],
}else{
self.bufferOffset+等于bytesWritten,
}
}
}break,
caseNSStreamEventErrorOccurred:{
[self_stopSendWithStatus:@"Streamopenerror"],
}break,
caseNSStreamEventEndEncountered:{
//ignore
}break,
default:{
assert(NO),
}break,
}
}
#pragmamark*Actions
在上面的传送设置好之后,我们还要设置界面操作的指示,比如如何在用户界面上选择你所要发送的内容.如下面函数所示:
-(IBAction)sendAction:(UIView*)sender
{
assert([senderisKindOfClass:[UIViewclass]]),
if(!self.isSending){
NSString*filePath,
在用户界面上使用按钮的标签,以确定哪个图像传送
filePath等于[[AppDelegatesharedAppDelegate]pathForTestImage:sender.tag],
assert(filePath!等于nil),
[self_startSend:filePath],
}
}
作为一个流程,我们希望在不想发送数据的时候,可以取消发送,可以按照下面的程序实现:
-(IBAction)cancelAction:(id)sender
{
#pragmaunused(sender)
[self_stopSendWithStatus:@"Cancelled"],
}
#pragmamark*Viewcontrollerboilerplate//视图控制器编译
@synthesizestatusLabel等于_statusLabel,//把属性定义为外部可访问,下同
@synthesiz
上一页 3 4 5 6 7 8 9 10 11 12 下一页
操作系统方面有关论文范文,与本科生毕业设计文规范,本科生文文献综述北京DOC相关论文答辩开场白参考文献资料: