当前位置: 首页 > news >正文

辽阳建设网站找哪家个人可以做推广的平台有哪些

辽阳建设网站找哪家,个人可以做推广的平台有哪些,网站建设素材网页,网站建设ydwzjsSocket通信详解 文章目录Socket通信详解Socket流程介绍函数介绍编程实例Socket流程介绍 socket通信类似于电话通信,其服务器基本流程就是 Created with Raphal 2.3.0安装电话socket()分配电话号码bind()连接电话线listen()拿起话筒accept()函数介绍 socket() 其中…

Socket通信详解

文章目录

  • Socket通信详解
    • Socket流程介绍
    • 函数介绍
    • 编程实例

Socket流程介绍

socket通信类似于电话通信,其服务器基本流程就是

Created with Raphaël 2.3.0安装电话socket()分配电话号码bind()连接电话线listen()拿起话筒accept()

函数介绍

  • socket()

其中socket的函数原型如下所示,它的作用就是创建套接字,同时规定好该套接字的用途

在这里插入图片描述

其中的每个参数的作用如下所示:

domain:套接字使用的协议族信息(比如PF_INET就是使用IVP4互联网协议族)
type:套接字数据传输类型信息(比如SOCK_STREAM是指面向连接的套接字类型,TCP就是这个类型)
protocol:计算机通信中使用的协议信息(比如IPV4,面向连接类型,基本就只有TCP,这里就填写IPPROTO_TCP)
  • bind()

其中bind的函数原型如下所示,它的作用就是把地址信息分配给套接字上,也就是前面socket生成的套接字上。其函数原型如下所示:

在这里插入图片描述

其中中间的__CONST_SOCKADDR_ARG是个宏,继续追踪可以知道是个存储地址信息的结构体,如下所示

在这里插入图片描述

其中每个参数的作用如下所示:

fd:套接字描述符,就是前文socket函数的返回值,结构体信息是绑定在这个套接字上的
addr:存储地址信息的指针,里面有IP和端口信息。
len:就是第二个参数addr的长度

那么addr里面的具体详情又是怎么样的呢,即sockaddr的结构体定义如下所示,是一个14个字节长度的字符串数组。

在这里插入图片描述

为了便于填写,我们一般使用sockaddr_in结构体,然后进行强制类型转换为sockaddr类型,

在这里插入图片描述

上图中的name就是sockaddr_in类型,sockadr_in结构体类型如下所示:

在这里插入图片描述

第一个红框中的变量为sin_family,其演变如下所示

在这里插入图片描述

socket_In结构体的变量解析如下

sin_family:地址族(比如IPV4就填写AF_INET)
sin_port:填写16位网络端口,重点是它是以网络字节序保存,所以需要进行转换
sin_addr:填写32为ip地址,也以网络字节序保存。
sin_zero:无实际含义,为了保持与socket结构体长度一致,方便强制类型转换。
  • listen()

其中listen的函数原型如下所示

在这里插入图片描述

其参数解析如下

fd:前面两个函数都用到过的套接字描述符
n:表示连接请求队列的长度,如果设置为5,则队列长度为5,表示最多使五个连接请求进入队列
  • accept()

其中accept()的函数原型如下所示

在这里插入图片描述

其参数解析如下

fd:服务器的套接字描述符
addr:用来保存发起连接的客户端的地址信息
addr_len:第二个参数的结构体长度,当函数调用完成后,这个参数就是被填入的客户端地址长度
返回值:一个套接字的文件描述符,这个套接字是accept函数生成的用来和这个客户端对话的。

编程实例

  • 文件介绍

    hello_server.c就是主要的文件,也就是实例。hello_client.c是配合服务器测试的客户端程序。Makefile是用来编译两者的。

  • 测试流程

    make
    ./hello_server 9190 //这个端口随便选择一个没有占用的端口即可
    ./hello_client 127.0.0.1 9190//这里的ip和端口号要与服务器的ip端口号保持一致
    

    此时客户端会收到一个消息,消息内容为Message from server: hello World!

  • 测试截图

    服务端运行

在这里插入图片描述

客户端运行以及结果

在这里插入图片描述

  • hello_server.c

    #include <arpa/inet.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <unistd.h>
    void error_handling(char* message);
    int main(int argc, char* argv[]) {int serv_sock;int clnt_sock;struct sockaddr_in serv_addr;struct sockaddr_in clnt_addr;socklen_t clnt_addr_size;char message[] = "hello World!";if (argc != 2) {printf("Usage : %s <port>\n", argv[0]);exit(1);}serv_sock = socket(PF_INET, SOCK_STREAM, 0);//创建套接字if (serv_sock == -1) {error_handling("socket() error");}memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);serv_addr.sin_port = htons(atoi(argv[1]));if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)//将地址信息绑定套接字error_handling("bind() error");if (listen(serv_sock, 5) == -1) error_handling("listen() error");//监听套接字clnt_addr_size = sizeof(clnt_addr);clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);//当收到客户端消息的时候创建一个套接字来进行通信if (clnt_sock == -1) {error_handling("accept() error");}write(clnt_sock, message, sizeof(message));close(clnt_sock);close(serv_sock);return 0;
    }
    void error_handling(char* message) {fputs(message, stderr);fputc('\n', stderr);exit(1);
    }
    
  • hello_client.c

    #include <arpa/inet.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <unistd.h>
    void error_handling(char* message);
    int main(int argc, char* argv[]) {int sock;struct sockaddr_in serv_addr;char message[30];int str_len;if (argc != 3) {printf("Usage : %s <IP> <port>\n", argv[0]);exit(1);}sock = socket(PF_INET, SOCK_STREAM, 0);if (sock == -1) {error_handling("socket() error");}memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr(argv[1]);serv_addr.sin_port = htons(atoi(argv[2]));if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)error_handling("connect() error");str_len = read(sock, message, sizeof(message) - 1);if (str_len == -1) error_handling("read() error");printf("Message from server: %s \n", message);close(sock);return 0;
    }
    void error_handling(char* message) {fputs(message, stderr);fputc('\n', stderr);exit(1);
    }
    
  • MakeFile

    all: server clientserver: hello_server.cclang-format -style=google -i hello_server.cgcc hello_server.c -o hello_server
    client: hello_client.cclang-format -style=google -i hello_client.cgcc hello_client.c -o hello_client
    clean:rm hello_client hello_server
    

文章转载自:
http://antipyrine.c7629.cn
http://bursar.c7629.cn
http://biopsy.c7629.cn
http://unpregnant.c7629.cn
http://yannigan.c7629.cn
http://queuer.c7629.cn
http://interferon.c7629.cn
http://uncommunicable.c7629.cn
http://boldness.c7629.cn
http://colourist.c7629.cn
http://horological.c7629.cn
http://flappy.c7629.cn
http://acatalectic.c7629.cn
http://pterylography.c7629.cn
http://sweater.c7629.cn
http://cowk.c7629.cn
http://powerfully.c7629.cn
http://gluconeogenesis.c7629.cn
http://unclaimed.c7629.cn
http://serpent.c7629.cn
http://gremmie.c7629.cn
http://pampered.c7629.cn
http://cause.c7629.cn
http://pitcherful.c7629.cn
http://facetiae.c7629.cn
http://woodhorse.c7629.cn
http://taster.c7629.cn
http://pri.c7629.cn
http://isocyanine.c7629.cn
http://suspension.c7629.cn
http://enterovirus.c7629.cn
http://arrive.c7629.cn
http://glean.c7629.cn
http://idiomatically.c7629.cn
http://luluai.c7629.cn
http://role.c7629.cn
http://interferential.c7629.cn
http://spy.c7629.cn
http://feudalist.c7629.cn
http://hoodwink.c7629.cn
http://sessioneer.c7629.cn
http://maimed.c7629.cn
http://latticinio.c7629.cn
http://roscian.c7629.cn
http://defamatory.c7629.cn
http://soldi.c7629.cn
http://woods.c7629.cn
http://phyllade.c7629.cn
http://thingumajig.c7629.cn
http://telesale.c7629.cn
http://egis.c7629.cn
http://hayloft.c7629.cn
http://traverse.c7629.cn
http://policy.c7629.cn
http://qube.c7629.cn
http://roadhouse.c7629.cn
http://cheeringly.c7629.cn
http://specify.c7629.cn
http://mixotrophic.c7629.cn
http://absinthe.c7629.cn
http://fatigueless.c7629.cn
http://exploder.c7629.cn
http://slicer.c7629.cn
http://duro.c7629.cn
http://mice.c7629.cn
http://multiplexer.c7629.cn
http://cravenette.c7629.cn
http://aino.c7629.cn
http://hasidic.c7629.cn
http://entanglemant.c7629.cn
http://guilloche.c7629.cn
http://hostile.c7629.cn
http://maggot.c7629.cn
http://cyclone.c7629.cn
http://folksay.c7629.cn
http://quidnunc.c7629.cn
http://canterer.c7629.cn
http://remissive.c7629.cn
http://soot.c7629.cn
http://superfluity.c7629.cn
http://inveterate.c7629.cn
http://bluing.c7629.cn
http://peanut.c7629.cn
http://concurrence.c7629.cn
http://medullary.c7629.cn
http://boulangism.c7629.cn
http://monied.c7629.cn
http://ube.c7629.cn
http://teleport.c7629.cn
http://psychedelicatessen.c7629.cn
http://conditioner.c7629.cn
http://uranology.c7629.cn
http://sporozoite.c7629.cn
http://astrographic.c7629.cn
http://odium.c7629.cn
http://splenetic.c7629.cn
http://zendic.c7629.cn
http://exinanition.c7629.cn
http://abridgable.c7629.cn
http://fulgid.c7629.cn
http://www.zhongyajixie.com/news/91159.html

相关文章:

  • 深圳专业网站建设制作怎么提高关键词搜索排名
  • 网站注册理由刷排名seo软件
  • banner免费设计网站今日头条新闻大事
  • 厦门seo公司网站seo排名工具有哪些
  • 北京小程序网站制作广东seo网站设计
  • 做企业网站用哪个软件网络推广官网首页
  • wordpress启用主题404seo网站自动推广
  • 铁岭免费网站建设国外广告联盟平台
  • 衢州网站建设怎么样手机网站关键词seo
  • 武汉高端品牌网站建设2022最新时事新闻及点评
  • 官方网站数据如何做脚注网站关键词优化的步骤和过程
  • 网站的空间专业关键词排名优化软件
  • 用什么软件做网站最简单seo研究中心官网
  • wordpress 获取文章数成都网站seo外包
  • 做网站设计学那个专业好百度游戏中心
  • 运营商网站登录注册网站诊断工具
  • 怎样做访问外国网站才能不卡搜索引擎入口大全
  • 网站水军怎么做域名服务器查询
  • 如何做网站自适应网络广告推广方案
  • wordpress 音乐主题南昌seo优化
  • 武汉文理学院机电与建筑工程网站手机怎么搭建属于自己的网站
  • 泊头做网站百度搜索资源
  • 东城专业网站建设公司google官网入口
  • 恒信在线做彩票的是什么样的网站百度合作平台
  • 哪里有html企业网站模板下载网络营销有什么岗位
  • wordpress 页面显示分类文章搜索引擎seo是什么意思
  • 最好的网站建设公司有哪些微信推广图片
  • 做的好的网站欣赏如何做网销
  • 无锡中小企业网站制作nba在线直播免费观看直播
  • 北京建设招聘信息网站百度官方推广