Socket UDP通讯

7 篇文章 0 订阅

UDP简单的分析以及TCP和Socket之间的区别

UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

UDP不是面向连接的,UDP传送数据不需要和服务器连接,只需要知道ip和监听端口,不需要链接没有目的的socket,只是将数据报投递出去,不管接收方是否成功接收到,因此是一种不可靠的传输。

但是UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。

TCP:

是一种面向连接的传输控制协议(transform contorl protocol),必须要和服务器交互,具有高安全性,可靠性,需要和服务器进行三次握手,能根据具体网络拥堵情况进行延时。

Socket:

Socket有两种连接操作方式,面向连接的和面向无连接的。使用UDP就是面向无连接的,使用TCP就是面向连接的。使用UDP无需要指定一个socket目的地,而是用TCP必须要指定一个socket目的地,需要进行预链接,否则连接不到。

socket就像是API,二UDP/TCP就是协议,使用scoket来实现内容的传送。


UDP的通讯,我用的是AsyncUdpSocket文件,文件下载在http://blog.csdn.net/zhuxb523/article/details/51097728这篇文章中有介绍

代码是用于两个手机之间通过UDP进行通信传输

代码如下:

#import "ViewController.h"
#import "AsyncUdpSocket.h"

@interface ViewController ()<AsyncUdpSocketDelegate>

@property (strong ,nonatomic) AsyncUdpSocket* udpServerSocket;
@property (strong ,nonatomic) AsyncUdpSocket* udpClientSocket;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //服务端创建
    _udpServerSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
    //与你的发送消息到对应手机客户端的端口号保持一致
    [_udpServerSocket bindToPort:8089 error:nil];
    [_udpServerSocket receiveWithTimeout:60 tag:200];
    
    //客户端创建
    _udpClientSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
    
    UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(100, 100, 60, 30);
    btn.backgroundColor  = [UIColor cyanColor];
    [btn addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    
    // Do any additional setup after loading the view, typically from a nib.
}

//客户端
-(void)btnAction
{
    NSData* data = [@"嗯,你好" dataUsingEncoding:NSUTF8StringEncoding];
    NSString* host = @"192.168.2.170";//需要发送消息的对方手机的IP
    UInt16 port = 9080;//与你的发送消息到对应手机的客户端的端口号保持一致
    
    [_udpClientSocket sendData:data toHost:host port:port withTimeout:60 tag:100];
    
}
//监听客户端是否发送成功
-(void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag
{
    if (tag == 100) {
        NSLog(@"数据成功");
    }
}

//服务端收到数据后的回调
-(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port
{
    NSString* message = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"----1----%@",message);
    [_udpServerSocket receiveWithTimeout:60 tag:200];
    return YES;
}

@end




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值