首页 > 系统相关 >Linux 多进程程序调试实例(七) -- 套接字

Linux 多进程程序调试实例(七) -- 套接字

时间:2023-02-08 10:23:04浏览次数:44  
标签:addr -- 程序调试 server client str Linux 接字 include

套接字

套接字介绍

  • socket 套接字是支持不同主机不同进程之间的通信

套接字函数

套接字编程

  • 在服务端,套接字编程顺序为 套接字创建(socket),套接字绑定(bind),套接字监听(listen),循环等待套接字链接(accept),读写消息(write、read),套接字关闭(close);
  • 在客户端,套接字编程顺序为 套接字创建(socket),套接字链接(connect),写读消息(write、read),套接字关闭(close);

代码

// server.cpp
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<cstdio>
#include<cstdlib>
#include<signal.h>

int main()
{
    int server_sockfd = socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in server_addr, client_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(9736);

    bind(server_sockfd, (sockaddr*)&server_addr, sizeof(server_addr));

    listen(server_sockfd, 5);

    signal(SIGCHLD, SIG_IGN);

    while (1)
    {
        // char ch = '\0';
        char str[1024] = {0};
        socklen_t  client_len = sizeof(client_addr);
        printf("Server waiting\n");
        int client_fd = accept(server_sockfd, (sockaddr*)&client_addr, &client_len);

        if(0 == fork()){
            read(client_fd, &str, 1024);
            printf("receive message from client_fd : %d, message : %s\n", client_fd, str);
            sleep(1);
            write(client_fd, str, 1024);
            close(client_fd);
            exit(0);
        }
        else{
            close(client_fd);
        }
    }
    
}
// client.cpp
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<cstdio>
#include<cstdlib>
#include<signal.h>

int main()
{
    int server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in address;
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr("127.0.0.1");
    address.sin_port = htons(9736);
    int len = sizeof(address);

    int result = connect(server_sockfd, (sockaddr*)&address, len);

    if(-1 == result){
        perror("ops: client\n");
        exit(1);
    }

    char str[1024] = {0};
    char rece_str[1024] = {0};
    printf("please input you want to type:%s",str);
    scanf("%s", str);
    write(server_sockfd, &str, 1024);
    read(server_sockfd, rece_str, 1024);

    printf("message from server:%s\n",rece_str);
    close(server_sockfd);
    return 0;
}

调试

两个独立的进程调试,和普通函数调试过程一样

标签:addr,--,程序调试,server,client,str,Linux,接字,include
From: https://www.cnblogs.com/wanghao-boke/p/17100814.html

相关文章

  • JAVA WEB项目大文件上传下载组件
    ​ 最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的......
  • Numpy中数组和矩阵操作的数学函数
    Numpy是一个强大的Python计算库。它提供了广泛的数学函数,可以对数组和矩阵执行各种操作。本文中将整理一些基本和常用的数学操作。基本数学运算:Numpy提供了许多基本......
  • Blender减面修改器
    推荐:使用 NSDT场景设计器 快速搭建3D场景。使用Decimate修改器的目的是减少雕刻或3D扫描模型的面数。要使用抽取修改器,请转到对象模式并选择要减少面数的任何模型。......
  • USACO 2023 January Contest, Platinum 题解
    TractorPaths题意:给定\(n\)个不交区间,两个区间之间有边当且仅当这两个区间的交非空。\(Q\)次询问,每次给定\(u,v\),求从\(u\)到\(v\)的最短路和最短路可能经过的点......
  • 京东micro-app 微服务
     源码地址:http://github.com/micro-zoe/micro-app官网地址:http://zeroing.jd.com/micro-app   微前端的概念是由ThoughtWorks在2016年提出的,它借鉴了微服......
  • 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(6)-Charles安卓手机抓包大揭秘
    1.简介Charles和Fiddler一样不但能截获各种浏览器发出的HTTP请求,也可以截获各种智能手机发出的HTTP/HTTPS请求。Charles也能截获Android和WindowsPhone等设备发......
  • [你必须知道的.NET]第十六回:深入浅出关键字---using全接触
    [你必须知道的.NET]第十六回:深入浅出关键字---using全接触 本文将介绍以下内容:using指令的多种用法using语句在Dispose模式中的应用  1. 引言在.NET大家庭......
  • 使用 Log4Net 记录日志
    使用Log4Net记录日志 第一步:下载Log4Net           下载地址:http://logging.apache.org/log4net/download_log4net.cgi          把下载的......
  • LINQ to SQL (Group By/Having/Count/Sum/Min/Max/Avg操作符)
    LINQtoSQL(GroupBy/Having/Count/Sum/Min/Max/Avg操作符) GroupBy/Having操作符适用场景:分组数据,为我们查找数据缩小范围。说明:分配并返回对传入参数进行分组操......
  • 11.4外围设备的中断请求
    IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制称为中断处理。中断处理在硬件控制中担当着重要角色。因为如果没有中断处理,就有可能出现处理无法......