嵌入式开发完整体系课程(含项目) 扫二维码继续学习 二维码时效为半小时

(170评价)
价格: 598.00元

宏INADDR_ANY的作用是获得本机的任意一个ip地址。

htonl函数是将文本ip地址转换成二进制长整型。

绑定ip地址时,可以将结构体srvaddr中的成员srvaddr.sin_addr.s_addr = htonl(INADDR_ANY);

Linux中listen(fd, 3)函数的第二个参数,代表最多处理几个连接,可连接个数为n+4,例如3就代表最多能处理7个。

inet_ntop可将二进制ip地址转换成字符串形式,返回值就是字符串。

[展开全文]
王布斯 · 06-13 · 0

server服务器端

1.使用socket函数生成一个socket文件描述符,socket函数的第三个参数一般设置为0

2.bind函数将socket描述符和ip地址以及端口port绑定

3.listen(fd)函数,将socket套接字变成监听套接字

4.accept(fd)函数里的参数是监听套接字,功能是返回一个新的fd',fd'被称为已连接套接字。

5.这时就可以通过read,write函数来读写fd'文件描述符,

6.最后关闭socket文件调用close(fd')或shutdown(fd')函数

client客户端(主动连接,主动挂断)

1.调用socket函数生成一个描述符fd

2.调用connect(fd)函数发送连接请求向服务器,服务器会发送一个回执,客户端再次回复连接成功,就返回一个已连接套接字

3.此时就可以使用已连接套接字的描述符,进行read,write函数进行读写操作

4.最后close或shutdown掉已连接套接字文件描述符

[展开全文]
王布斯 · 06-13 · 0

TCP 可靠的协议,适合大量数据,传输速度较低

 

UDP 不可靠的协议,不保证,适合小数据,传输速度快,实时性比较好

[展开全文]
纹鹿_ · 2017-04-02 · 0

套接字绑定的IP地址和端口在关闭时自动保留2倍msl,timewait时间

SOL_SOCKET通用层

[展开全文]
余嘉俊STB · 2016-10-15 · 0

通信端点fd

待连接套接字

绑定进程

网络上有数据发到IP:PORT传送到套接字对应的端点

listen设置监听套接字和设置允许多少个同时请求

accept等待监听

已连接套接字

关闭读写close

accept/connect会阻塞

tcp状态

connect

已连接套接字

ack发送后等待一段时间

 

[展开全文]
余嘉俊STB · 2016-10-13 · 0

accept阻塞

read通过管道传输

(删除用)list_for_each_safe

 

[展开全文]
余嘉俊STB · 2016-10-13 · 0

listenfd

connectfd

有数据到来的描述符会被保留下来

无数据到来的描述符将会被清空

accept返回已连接套接字

描述符集合

读就绪,写就绪,异常就绪

发起连接,通讯端点就绪状态

端点阻塞

缓冲区阻塞

网络错误

icmp发出reset信号

发送异常数据

设置异常就绪状态(设置错误码)

连接请求(特殊标记位的数据包)

syn标记为1

读就绪状态

触发select返回

accept等待连接请求

[展开全文]
余嘉俊STB · 2016-09-17 · 0

TCP连接

逻辑电路连接

通过管道

1个字节

忽略缓冲区暂停

紧急数据

8位控制信息 

 

[展开全文]
余嘉俊STB · 2016-09-16 · 0

多播组id

多播地址

网卡地址

[展开全文]
余嘉俊STB · 2016-09-13 · 0

建立端点

绑定地址和端口

recvfrom接收数据和地址

socket创建端点

实时性强

数据包套接字

INADDR_ANY0.0.0.0

while(迭代服务器)

[展开全文]
余嘉俊STB · 2016-09-05 · 0

bind(sockfd,const struct sockaddr *addr,socklen_t addrlen);

struct sockaddr

{

    sa_family_t safamily;

    char sa_data[14];

}

 

[展开全文]
October · 2016-09-05 · 0

TCP(即传输控制协议)

  是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)

  适用情况:

    1、适合于对传输质量要求较高,以及传输大量数据的通信

    2、在需要可靠数据传输的场合,通常使用TCP协议

UDP(User Datagram Protocol)用户数据报协议

  是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输

适用情况:

  1、发送小尺寸数据(如对DNS服务器进行IP地址查询时)、

  2、在接收到数据,给出应答

[展开全文]
October · 2016-09-05 · 0

四种TCP服务器IO模型

UNIX域套接字编程

arpa .h

进程通信

应用层(接收发送)

表示层(数据加密以及数据压缩)

会话层(数据缓存)

socket接口会话层与传输层之间

传输层(定义传输特性)

网络层(路由寻址,数据包转发)

数据链路层(驱动数据包)

物理层(器件)

选择socket插口

原生套接字接口不经传输层

可靠性(传输与否)

 

 

 

[展开全文]
余嘉俊STB · 2016-09-03 · 0

MSL: 数据包在网络的最大存活时间

为什么客户端关闭连接套接字文件后不是在发送应答信号(ACK`)后直接关闭,而是处于TIME_WAIT的状态,等待2个MSL的时间后才关闭文件?

原因是:防止在发送应答信号(ACK`)后,可能出现丢包情况,导致服务器收不到这个应答信号,如果客户端在发出应答信号后直接关闭且该应答信号的数据丢失,服务端会重置(reset)这个套接字文件为监听状态。这不是我们想要的结果。

如果客户端在发送应答信号后设置为TIME_WAIT状态,如果应答信号丢失,由于服务器收到客户端发送的第一个FIN请求而没有收到后续的应答信号,就会重新发送FIN`请求。从客户端发送应答信号ACK`开始,客户端就处于TIME_WAIT状态,这个状态持续2个MSL时间。如果在这个时间内客户端没有收到服务器重新发送的FIN`请求,客户端就可以大致确定服务器已经收到它发送的应答信号(ACK)。为什么不是百分百确定,因为FIN`请求也可能出现丢包的情况。以上是第一个原因。

第二个原因是因为在客户端发送ACK`信号期间,客户端重新又发送一个建立连接的SYN连接请求,如果客户端不进入TIME_WAIT状态且客户端重新请求连接的IP和端口与之前一样,服务器就无法区分是之前的连接还是后来创建的连接。

 

[展开全文]
120期余超 · 2016-08-30 · 0