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

【linux】TCP网络编程及Web服务器搭建

一、TCP客户端编程

1、TCP的概述

客户端:主动连接服务器、和服务器进行通信

服务器:被动被客户端连接,启动新的线程或进程 服务器客户端(并发服务器)

2、创建TCP套接字 

int sockfd = socket(AF_INET, SOCK_STREAM, 0); 

socket函数创建的TCP套接字,没有端口,默认为主动连接特性 

3、调用connect函数连接服务器

        tcp客户端通信之前 必须事先 建立和服务器的连接 

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

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

addr地址结构体 存放的是服务器的IP、PORT 返回值:成功为0 失败-

//连接服务器
struct sockaddr_in ser_addr;
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_port = htons(8000);
ser_addr.sin_addr.s_addr = inet_addr("10.9.11.251");
connect(sockfd, (struct sockaddr *)&ser_addr, sizeof(ser_addr));

 如果sockfd没有固定端口 在调用connect时系统自动分配随机端口为源端口

4、send发送消息 

 ssize_t send(int sockfd, const void *buf, size_t len, int flags);

sockfd:套接字

buf:需要发送的字符串的首元素地址

len:需要发送的字符串的实际长度

flags:默认为0

成功返回实际发送的字节数,失败返回-1

注意:TCP并不能发送0长度报文,但是UDP可以

 5、recv接收消息(默认阻塞)

#include <sys/types.h>

#include<sys/socket.h>

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

sockfd:套接字

buf:存放收到的消息

len:最大能接收的长度

flags:默认为0  

成功返回收到的实际字节数, 失败返回-1

recv如果收到0长度报文,表明对方已经断开连接。

 close(sockfd);断开连接

6、tcp客户端 收发数据

cilent.c

#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>

int main(int argc, char const *argv[])
{
    //创建TCP套接字
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        perror("socket");
        return 0;
    }
    printf("sockfd = %d\n", sockfd);

    //连接服务器
    struct sockaddr_in ser_addr;
    bzero(&ser_addr, sizeof(ser_addr));
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_port = htons(8082);
    ser_addr.sin_addr.s_addr = inet_addr("192.168.172.179");
    connect(sockfd, (struct sockaddr *)&ser_addr, sizeof(ser_addr));

    //send发送数据
    send(sockfd, "hello tcp", strlen("hello tcp"), 0);

    //recv接收数据
    unsigned char buf[1500] = "";
    int len = recv(sockfd, buf, sizeof(buf), 0);
    printf("len=%d buf=%s\n", len, buf);

    //关闭套接字
    close(sockfd);

    return 0;
}

 NetAssist充当服务器:

 二、TCP服务器编程

1、作为服务器的条件 

  1. 需要bind函数 为服务器绑定固定的端口、IP
  2. 使用listen函数 让服务器套接字 由主动变被动
  3. 等待客户端的连接到来 accept提取到来的客户端。 

 2、listen 监听函数

  • #include<sys/types.h> /* See NOTES */
  • #include<sys/socket.h>
  • int listen(int sockfd,

http://www.kler.cn/a/391472.html

相关文章:

  • 利用服务工作线程serviceWorker缓存静态文件css,html,js,图片等的方法,以及更新和删除及版本控制
  • 软件设计师-计算机网络
  • 自适应数据结构、自适应哈希表 (Adaptive Hash Table)详细介绍
  • 私有IP与公网IP
  • 服务器操作
  • 《传统视觉算法在视觉算法中的地位及应用场景
  • SpringBoot(十五)springboot集成Sentinel
  • Ollama的安装以及大模型下载教程
  • 活动|华院计算作为联盟理事单位出席进博会全球人工智能合作论坛
  • Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建
  • 35.3K+ Star!PhotoPrism:一款基于AI的开源照片管理工具
  • 关于element-plus中el-table组件宽度一直连续不断增加的问题
  • React 函数式更新 和 数据拷贝更新对比
  • npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)
  • 安卓解压软件推荐:高效处理压缩文件的实用工具
  • uni-app在跳转路径时如何传参数和如何接收
  • 探索金融科技:民锋科技如何利用数据驱动投资策略
  • mapreduce 将数据清洗后保存到 hbase
  • YOLOv8改进 | 利用YOLOv8进行视频划定区域目标统计计数
  • 软件架构技术深入解析:AOP、系统安全架构、企业集成平台与微服务架构