最后更新:2022-05-05 08:42:25 手机定位技术交流文章
Socket套接字
Socket有时被解释为系带或插头,尽管它实际上是一个网络通信端点。
在使用 Socket 连接之前, 您必须先建立一个套接字对象, 通常使用套接字方法 。
int socket(int domain, int type, int protocol);
域名: 选中域通常为 ipv4, ipv6 等。 AF_ INET 表示 IPv4 连接 。
SOCK_STREAM:连接数据流,SOCK_DGRAM:无连接数据报告,类型:定义数据传输方法。
以连接为主的套接字通信
1. 服务器上的工作流程:
(1) 使用套接字() 方法创建套接字对象 。
(2) 使用捆绑()方法将新形成的套接字柄与给定的 TCP 端口连接起来。
(3) 为了让插座继续监听并设定收听队列的大小,请使用列表方法。
(4) 当客户提交连接请求时,采用接受()方法接收请求并与客户连接。
(5) 通过发送或接收数据与客户沟通。
(6) 通信是完整的,并调用锁()功能关闭它。
2. 以下是客户工作流程:
(1) 使用套接字() 方法创建套接字 。
(2) 通过调用连接()方法启动服务器端套接字连接到服务器端套接字。
(3) 连接一旦建立,数据即予读写。
(4) 数据流完整,套接字用 " 关闭() " 方法关闭。
绑定( 锁定, 规则的块状addr *my_ addr, socklen_ t addren) // 如果绑定成功返回 0, 如果失败返回 0 。 - 1
Sockfd: 套接字 () 方法创建您想要连接的套接字控点 。
My_addr: 存储 IP 地址和端口号的袜子结构的点 。
Addrlen: 这是袜子结构的长度 。
intlisten( int s, intbacklog); / 在应该返回 1 时调用函数返回 0 ;
s: 监听插座把手。
托盘 : 指定您可以监听的最大连接次数, 默认为 20 个 。
Int 接受( int s, rules stockaddr *addr, socklen_ t *ddrlen); // 成功调用方法, 返回新形成的套接字控管, 无法返回 1 。
s: 监听插座描述符。
Addr: 指索卡迪尔结构。
结构大小。
接受 () 方法用于连接类型合成。 它从连接请求的队列中获取连接信息, 进行新的合成, 并提供带带的文件描述 。
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
套接字手柄( 套接字) :
Ser_addr: 包含服务器 IP 地址和端口号的 sockaddr 结构的指针 。
Serv_addr 结构的长度 。
连接 () 方法建立与服务器的连接 。
ssize_t 发送( ints, constevaty *buf, size_ t len, inflags); // 传送数据成功, 返回已传输的字节, 无法返回 1 。
S:这是插座的把手。
buf: 要发送的数据缓冲 。
数据缓冲长度由 len 指定 。
0个通用国旗0面旗
ssize_t recv(int s, void *buf, size_t len, int flags);
s:指定用于读取数据的套接字控点。
缓冲: 数据存储的缓冲信头地址 。
Len: 定义要接收的缓冲大小 。
0个通用国旗0面旗
当 recev () 函数读取数据时, 它返回已读取的数据的字节号, 无法返回到一个, 如果软件包关闭, 则返回零 。
[连接导向回声服务方案示例]
1、服务器端代码:
2、客户端代码:
【运行结果】
监听和接收服务器上的数据:
lwb@ubuntu:~/socket$ gcc echo_serv.c -o s
lwb@ubuntu:~/socket$ ./s
success to create socket 3
success to bind address!
监听访问(听和等待数据)
number of receive bytes = 100 data = abc
number of receive bytes = 100 data = def
number of receive bytes = 100 data = test
number of receive bytes = 100 data = hello
number of receive bytes = 100 data = quit
当客户端连接到服务器时, 发送数据 。
lwb@ubuntu:~/socket$ gcc echo_client.c -o c
lwb@ubuntu:~/socket$ ./c
success to create socket 3
success connect to server!
data send: abc receive: abc
data send: def receive: def
data send: test receive: test
data send: hello receive: hello
data send: quit receive: quit
未连接的套接字通信比连接的插座的最小值简单,数据传输无法确保无障碍性,这在数据要求低的地方是常见的。未连接的套接字使用 TCP/IP 组的 UDP 协议传输数据。
int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
int sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
校正from () 方法用于接收从所提供的 IP 地址和端口接收数据。 函数调用成功返回已发送数据但未能将一个返回到一个的字节 。
s:是套接字句柄。
msg:数据传输到的缓冲区的第一个地址。
len:缓冲大小。
说明用于接收数据的IP和端口号。
索卡德的结构性大小
[未连接的时间服务方案规划样本]
1、服务器端代码:
2、客户端代码:
【运行结果】
服务器端:
lwb@ubuntu:~/socket$ gcc time_serv.c -o s
lwb@ubuntu:~/socket$ ./s
create socket: Success
我不确定,装订套座 等待客户.. //会等待。
client request: time
client request: quit
客户端:
lwb@ubuntu:~/socket$ gcc time_serv.c -o s
lwb@ubuntu:~/socket$ ./s
create socket: Success
bind socketwaiting request from client…
client request: time
client request: quit
【扩展学习】
使用选择技术管理众多连接 。
使用民意测验技术管理许多连接。
关于建立亚美尼亚亚美尼亚亚美尼亚亚美尼亚国内嵌入Linux系统的详细情况
本文由 在线网速测试 整理编辑,转载请注明出处。