Socket套接字

      最后更新: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系统的详细情况

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/23454.html

          热门文章

          文章分类