Linux Socket网络编程基础

Socket Server 的核心流程的一点解释

socket -> bind -> listen -> accept -> read -> write -> close

后面的 read->write->close 比较好理解. 对于这个 socket->bind->listen->accept 我们则需要重点关注一下:

Socket Server ,也就是网络编程中的服务端.  一开始是以接话员的逻辑来设计的.比如 12580的客服.

  • socket 调用相当于招聘了一个客服.

  • bind 给客服分配了具体的岗位和号码 .

  • listen 客服上岗,开始在电话前等咨询电话进来.

  • accept  显然这是拿起电话开始服务.

值得注意的是 accept 才是阻塞的.它会一直阻塞直到有连接进来. 我们上面的设计是比较简单的.

实际上设计更复杂,比如accept 进来交给新的进程,线程,协程等去处理.然后这里继续接收新的连接进来.

 

C/C++ 语言本身没有socket,要调用操作系统的API, Windows和Linux的API还不同。

Python和Go的语言本身就有API,而且要比C简单很多。

但大体上,首先创建,然后绑定,然后监听,然后accpet这个步骤是不会变的。

这些步骤并不需要记忆,用到的时候去查API手册即可。

 

HTTP协议本质上就是服务器向客户端发送文本类型(html)的数据,浏览器解析渲染。

HTTP响应并不需要一次发送完,可以发送多次,如下所示:

  const char body[] =
      "<h1 style=\"color:red;\">欢迎来到代码会说话的编程世界!</h1>\r\n";
  const char headers[] =
      "HTTP/1.1 200 OK\r\n"
      "Content-Type:text/html;charset=utf-8\r\n"
      "Content-Length:75\r\n"
      "Connection: close\r\n"
      "\r\n";
  while (true) {
    int clientfd =
        accept(serverfd, (struct sockaddr *)&client_addr, &client_addr_len);
    if (CHECK_FAIL(clientfd)) {
      return -1;
    }
    char *client_ip = inet_ntoa(client_addr.sin_addr);
    printf("client connected: %s:%d\n", client_ip, ntohs(client_addr.sin_port));
    ssize_t send_cnt = -1;
    send_cnt = write(clientfd, headers, sizeof(headers));
    if (CHECK_FAIL(send_cnt)) {
      continue;
    }
    send_cnt = write(clientfd, body, sizeof(body));
    if (CHECK_FAIL(send_cnt)) {
      continue;
    }
    ret = close(clientfd);
    CHECK_FAIL(ret);
  }

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值