码迷,mamicode.com
首页 > 其他好文 > 详细

B19-socket初窥

时间:2015-11-15 10:48:01      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:

学前知识

一、网路通讯三要素

1、IP地址(主机名)
    1》网络中设备的标示
    2》不易记忆,可以用主机名
    3》本地回环地址:127.0.0.1 主机名:localhost
2、端口号
    1》用于标示进程的逻辑地址,不同进程的标示
    2》有效端口:0~65535
    3》其中0~1024由系统使用或者保留端口,开发中不要使用1024以下的端口
3、传输协议(通讯的规则)
    1》TCP
    2》UDP
     ps:www.ip138.com网站可以用来查询IP信心。

二、常见网络协议

技术分享

三、网络七层协议

      传递信息时,由上到下再由下到上分别是封包和解包。

技术分享

四、TCP和UDP

1、UDP(用户数据报协议)
    1》只管发送,不确认对方是否接收到
    2》将数据及源和目的封装成数据包中,不需要建立连接
    3》每个数据报的大小限制在64K之内
    4》因为无需连接,因此是不可靠协议
    5》不需要建立连接,速度快
    6》应用场景:多媒体教室/网络流媒体,用得很少
2、TCP(传输控制协议)
    1》建立连接,形成传输数据的通道
    2》在连接中进行大数据传输(数据大小不收限制)
    3》通过三次握手完成连接,是可靠协议,安全送达
    4》必须建立连接,效率会稍低
 

五、建立连接的三次握手,断开连接的四次握手

技术分享技术分享

正文

一、Socket(插座)概念

    1、Socket就是为网络服务提供的一种机制
        1》在Unix中,网络既是Socket,并不局限在TCP/UDP
        2》Socket可以用于自定义协议
    2、通信的两端都是Socket
    3、网络通信其实就是Socket间的通信
    4、数据在两个Socket间通过IO传输
    5、Socket开始时是纯C语言的,是跨平台的

二、Socket通讯示意图

技术分享

三、利用终端nc建立socket聊天

 1 // 1. 创建 socket
 2     /**
 3      参数
 4      
 5      domain:    协议域,AF_INET->IPV4
 6      type:      Socket 类型,SOCK_STREAM(TCP)/SOCK_DGRAM(报文 UDP)
 7      protocol:  IPPROTO_TCP,如果传入0,会自动根据第个参数,选择合适的协议
 8      
 9      返回值
10      socket > 0 就成功
11      */
12     int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
13     
14     // 2. 连接到服务器
15     /**
16      参数
17      1> 客户端socket
18      2> 服务器地址结构体指针
19      3> 结构体数据长度
20      返回值
21      0 成功/其他 错误代号
22      */
23     struct sockaddr_in serverAddr;
24     serverAddr.sin_family = AF_INET;
25     // 端口
26     serverAddr.sin_port = htons(12345); // 终端输入 $nc -lk 12345才能连接成功(打开本机12345端口,并持续监听)
27     // 地址 inet_addr 函数,可以将 ip 地址转换成一个数字
28     serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
29     // 在 C 语言开发中,经常传递一个数据结构的指针同时,需要指定该数据结构的长度
30     int connResult = connect(clientSocket, (const struct sockaddr *)&serverAddr, sizeof(serverAddr));
31     if (connResult == 0) {
32         NSLog(@"连接成功");
33     } else {
34         NSLog(@"连接失败-%d",connResult);
35     }
36     
37     // 3. 发送数据给服务器
38     /**
39      参数
40      1> 客户端socket
41      2> 发送内容地址
42      3> 发送内容长度
43      4> 发送方式标志,一般为0
44      返回值
45      如果成功,则返回发送的字节数,失败则返回SOCKET_ERROR
46      */
47     NSString *sendMsg = @"are you ok?";
48     ssize_t sendLength = send(clientSocket, sendMsg.UTF8String, strlen(sendMsg.UTF8String), 0);
49     NSLog(@"发送了%ld个字节",sendLength);
50     
51     // 4. 从服务器接收数据
52     /**
53      参数
54      1> socket
55      2> 接收数据的缓冲区地址,需要提前准备
56      3> 缓冲区长度
57      4> 标记,0,阻塞式
58      
59      返回值
60      如果成功,则返回接收到的字节数
61      */
62     uint8_t buffer[1024]; // 要把空间准备出来
63     ssize_t recvLength = recv(clientSocket, buffer, sizeof(buffer), 0);
64     NSLog(@"接收了%ld个字节",recvLength);
65     // 获取服务器返回的数据,从缓冲区中读取 recvLen 个字节!
66     NSData *data = [NSData dataWithBytes:buffer length:recvLength];
67     // 转换成字符串
68     NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
69     NSLog(@"%@",str);
70     
71     // 5、关闭
72     /**
73      长连接:连上就一直聊!通常用于 QQ,即时通讯,效率高!
74      短连接:通讯一次,马上断开,下一次再次建立连接,效率低
75      */
76     close(clientSocket);

1、Netcat

    1》是一个终端下用于调试和检查网络的工具包
    2》可用于创建 TCP/IP 连接
2、智能家居原理
    1》手机端只是发送指令和接收回执解析。核心控制模块都在硬件里集成,无法扩展或改变。
技术分享
 

B19-socket初窥

标签:

原文地址:http://www.cnblogs.com/yaann/p/4960049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!