zoukankan      html  css  js  c++  java
  • 11

    一、网络编程

    1表现形式:一台机子上的应用程序和另外一个设备的程序之间能够互相交换数据。

    2 7层网络结构

    硬件层:解决硬件连接问题

    数据链路层:解决硬件之间能够向指定设备传输数据

    IP:为设备提供一个虚拟的网络逻辑地址(门牌号)

    MAC:设备的物理地址(网卡)

    3 TCP / UDP

    是两个不同的数据传输协议,就是解析字节的方式不同

    目的:保证数据在设备和设备之间能够传输

    协议:有结构的字节串

    TCP 一对一传输 可靠

    UDP 一对多传输 不可靠(如电视机)

    4 socket(套接字)

    会话握手

    设备与设备的基本通信原理

    步骤:A->B

    1B设置监听端口(大一点8000+因为小号已经被占用了)

    2A->B要两大要素:

        ①、找到BIP地址

        ②、找到B的监听端口

    3B监听到端口进行保留

    4、进行传输和接收数据。。。

    注意:传输的数据是以字节为单位(NSData

     

    首先确认跟另一台机子试下能否ping成功

    ping 192.168.1.xx

    ctrl + c 停止

     

    准备:(clientserver

    导入AsyncSocket

    AsyncSocket.m 标记为 -fno-objc-arc

    导入CFNetWork框架

     

    server代码:

    //
    // MXViewController.m
    // day1102_TCPSocketServer
    //
    // Created by tarena on 14-3-7.
    // Copyright (c) 2014年 tarena. All rights reserved.
    //
    
    #import "MXViewController.h"
    #import "AsyncSocket.h"
    
    
    @interface MXViewController () <AsyncSocketDelegate>
    
    @property (nonatomic, strong) AsyncSocket *serverSocket;
    @property (nonatomic, strong) AsyncSocket *inSocket;
    - (IBAction)tap:(id)sender;
    
    @end
    
    @implementation MXViewController
    
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }
    
    - (IBAction)tap:(id)sender {
    
    self.serverSocket = [[AsyncSocket alloc] init];
    self.serverSocket.delegate = self;
    
    // 监听端口
    [self.serverSocket acceptOnPort:8000 error:Nil];
    
    
    }
    
    -(void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{
    self.inSocket = newSocket;
    NSLog(@"连接成功");
    // 读取数据
    [self.inSocket readDataWithTimeout:-1 tag:0]; // -1表示没有时间限制 一直接收
    
    }
    
    -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    // NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    // NSLog(@"%@", text);
    //
    // 对象反归档
    NSKeyedUnarchiver *unarc = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    id playerObj = [unarc decodeObjectForKey:@"player"];
    
    
    
    }
    
    @end

    client代码:

     

    //
    //  MXViewController.m
    //  day1101_TCPSocketClient
    //
    //  Created by tarena on 14-3-7.
    //  Copyright (c) 2014年 tarena. All rights reserved.
    //
    
    #import "MXViewController.h"
    #import "AsyncSocket.h"
    #import "MXPlayer.h"
    
    @interface MXViewController ()
    
    @property (nonatomic, strong) AsyncSocket *clientSocket;
    - (IBAction)tap:(id)sender;
    - (IBAction)send:(id)sender;
    @property (weak, nonatomic) IBOutlet UITextField *textField;
    - (IBAction)sendMessage:(id)sender;
    
    
    @end
    
    @implementation MXViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (IBAction)tap:(id)sender {
        
        self.clientSocket = [[AsyncSocket alloc] init];
        
        // 连接服务器
        [self.clientSocket connectToHost:@"192.168.1.202" onPort:8000 withTimeout:-1 error:Nil];
        
    }
    
    - (IBAction)send:(id)sender {
        
        NSData *data = [@"hello" dataUsingEncoding:NSUTF8StringEncoding];
        
        [self.clientSocket writeData:data withTimeout:-1 tag:0];
        
        
    }
    - (IBAction)sendMessage:(id)sender {
        MXPlayer *player = [[MXPlayer alloc] init];
        player.name = self.textField.text;
        
        // 对象归档  对象->data
        NSMutableData *data = [NSMutableData data];
        NSKeyedArchiver *arc = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
        // 编码
        [arc encodeObject:player forKey:@"player"];
        
        [arc finishEncoding];
        
        
        [self.clientSocket writeData:data withTimeout:-1 tag:0];
        
    }
    @end

    传输数据

    对象 -> NSString ->Data 跨平台

    对象 -> Data

    用途:

    和服务器进行数据交互

    调用远程服务器应用程序的api,并传输对象

     

    传输图像

    client端有一个textField和一个获取按钮

    server端什么都没有

    server端的程序上的documents目录下,存放图片到documents

    client端输入图片名称,发送到server

    server端将同样名称的图片返回给client

    1.如果图片不再,

    在客户端的另外一个label上显示没有这张图片

    2.支持二次搜索

  • 相关阅读:
    【题解】SDOI2015序列统计
    【合集】有标号的DAG图计数(合集)
    【题解】有标号的DAG计数4
    【题解】有标号的DAG计数3
    【题解】有标号的DAG计数2
    【题解】有标号的DAG计数1
    【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差
    【题解】CTS2019珍珠(二项式反演+卷积)
    【题解】餐巾计划问题
    【题解】数字梯形问题
  • 原文地址:https://www.cnblogs.com/yangmx/p/3674793.html
Copyright © 2011-2022 走看看