B19-socket初窥

学前知识

一、网路通讯三要素

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 连接

参考文章:http://www.oschina.net/translate/linux-netcat-command

2、智能家居原理

1》手机端只是发送指令和接收回执解析。核心控制模块都在硬件里集成,无法扩展或改变。

时间: 2024-10-13 01:25:06

B19-socket初窥的相关文章

Boost.ASIO简要分析-1 初窥

Boost.Asio是一个主要用于网络及底层I/O编程的跨平台C++库. 1. 初窥 Boost.Asio支持对I/O对象进行同步及异步操作. 1.1 同步操作 同步操作的事件顺序如下图所示: 1) 调用者调用I/O对象的connect函数开始连接操作,socket.connect(server_endpoint): 2) I/O对象将连接请求传递给io_service: 3) io_service调用操作系统函数: 4) 操作系统返回结果给io_service: 5) io_service将结

Java发送邮件初窥

一.背景 最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送. 二.Java发送邮件的注意事项 1.不同的邮箱有不同的支持协议,比如有些只支持SSL协议,有些只支持TLS协议,还有些同时支持SSL和TLS协议. 2.支持不同协议的邮箱,在使用Java发送邮件时要使用不同的方式发送,下面我会介绍基于SSL和TLS的两种实现方式. 附:常用邮箱的服务器(Smtp/POP3)地址和端口总结 三.代

Scrapy 1.4 文档 01 初窥 Scrapy

初窥 Scrapy Scrapy 是用于抓取网站并提取结构化数据的应用程序框架,其应用非常广泛,如数据挖掘,信息处理或历史存档. 尽管 Scrapy 最初设计用于网络数据采集(web scraping),但它也可用于使用 API(如 Amazon Associates Web Services)提取数据或用作通用的网络爬虫. 爬虫(spider)示例 为了向您展示 Scrapy 带给您的是什么,我们将使用最简单的方式运行一个爬虫,向您展示一个 Scrape Spider 的例子. 这是一个爬虫的

jQuery源码学习(2):选择器初窥

选择器初窥 代码架构: jQuery选择器可以依照传入数据的类型分为五大类: 传入字符串:$("div"), $("#id"), $(".div1"),$(".div p.title") 传入html代码:$("<div></div>"), $("<div>1</div><div>2</div>") 传入对象:$(d

Swift初窥----深入Swift

存储函数 内存中的Fibonacci函数,避免重复递归,来提高代码执行效率 模板 编译器 Swift编译器,使其可以编译出更快的机器代码 Swift初窥----深入Swift,布布扣,bubuko.com

初窥netfilter/iptables

做这个东西太麻烦了,一不小心,就被自己关门外了. ---------------------------------------------- 一.前言 二.环境 三.语法解析 四.配置及测试 1.SNAT案例 2.DNAT案例 3.SSH案例 4.SSH深入案例(自定义规则) 5.web和ftp(自定义规则) 6.web和ftp(系统默认规则) 五.保存 ---------------------------------------------- 一.前言 iptables即Linux 内核集

初窥ElasticSearch

初窥ElasticSearch 官网上面的,不知道讲的是什么.. youtube上面有一个start with,内容是在windows下面跑这个elastic search,然后用一个fidler工具可视化测试 https://www.youtube.com/watch?v=60UsHHsKyN4 粗略看起来,其实es和其他db没什么大区别,只是在搜索上有很多强大功能,所以很适合用在需要搜索的项目.貌似用curl发送一个JSON格式的数据(实际上是命令)到es就可以做CRUD elasticse

C++拾遗(二)——初窥标准库类型

本篇博文的开始,先介绍一道书上看到的智力题:有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸.有一台称重精准的天平,只是用一次天平的情况下如何找出比较重的那瓶药丸? 好了,直接公布答案.从药瓶#1取出一粒药丸,从药瓶#2取出两粒,从药瓶#3取出三粒,依此类推.如果每粒药丸均重1克,则称得总重量为210克(1 + 2 + … + 20 = 20 * 21 / 2 = 210),“多出来的”重量必定来自每粒多0.1克的药丸.药瓶的编号可由算式(weight - 210 gr

初窥CSS布局(一篇文章学会布局)

写一篇文章,难免要为之命名,所谓名不正,则言不顺:言不顺,则事不成.这篇文章是要说明一下CSS中的布局,实为入门之法矣. 本想命名为"布局说"的,但是总感觉题目太大,被大神们看到难免沦为笑柄,思来想去,便命名为"初窥CSS布局". 不管是写一个html页面,还是打算建一个网站,首先应该想的是怎么为之布局,这是常常让我头疼的事情,不知,这是否也曾困扰着 足下?您是怎么为页面布局的呢?是否有为页面布局的通用之法呢?我不知道.但是下文,就是从头到尾介绍了一种页面布局的方法