Linux程序设计:套接字

这篇具有很好参考价值的文章主要介绍了Linux程序设计:套接字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux套接字(Socket)是在操作系统中用于进程间通信的机制。

socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。

客户端代码模拟: 

#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/un.h>

int main(){
    int sockfd ;
    int len ;
    struct sockaddr_un address ;
    int result ;
    char ch ='A';

    sockfd = socket(AF_UNIX,SOCK_STREAM,0);

    address.sun_family = AF_UNIX ;
    strcpy(address.sun_path,"server_socket"); 
    len = sizeof(address);
    
    result = connect(sockfd,(struct sockaddr *)&address,len);
    if(result ==-1){
      printf("ops: client1 ret= %x\n",result);
      perror("oops: client1 ");
      exit(EXIT_FAILURE);
    }

    write(sockfd,&ch,1);
    read(sockfd,&ch,1);
    printf("char from server =%c\n",ch);
    close(sockfd);
    exit(0);

}

服务端代码模拟: 

#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/un.h>

int main(){
    int server_sockfd , client_sockfd ;
    int server_len,client_len ;
    struct sockaddr_un server_address ;
    struct sockaddr_un client_address ;

    unlink("server_socket");
    server_sockfd = socket(AF_UNIX,SOCK_STREAM,0);
    server_address.sun_family  =AF_UNIX ;
    strcpy(server_address.sun_path,"server_socket");
    server_len = sizeof(server_address);
    bind(server_sockfd,(struct sockaddr * )&server_address,server_len);

    listen(server_sockfd,5);
    while (1)
    {
        char ch ;
        printf("server waiting\n");
        client_len = sizeof(client_address);
        client_sockfd = accept(server_sockfd,
        (struct sockaddr * )&client_address,(socklen_t *)&client_len);

        read(client_sockfd,&ch,1);
        ch++ ;
        write(client_sockfd,&ch,1);
        close(client_sockfd);
    }
    
}

测试入口: 文章来源地址https://www.toymoban.com/news/detail-819055.html

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

int main(int argc ,char *argv[]){

   char *host , **names ,**addrs ;
   struct hostent *hostinfo ;

   if(argc ==1){
     char myname[256];
     gethostname(myname,255);
     host = myname ;
   }else {
    host = argv[1] ;
   }

   hostinfo =  gethostbyname(host); 
   if(!hostinfo){
     fprintf(stderr,"cannot get info for host:%s\n",host);
     exit(1);
   }
   
    printf("result for host : %s \n",host);
    printf("Name: %s \n", hostinfo->h_name);
    printf("Aliases:");

    names = hostinfo->h_aliases ;
    while (*names)
    {
        printf(" %s",*names);
        names++ ;
    }
    printf("\n");

    if(hostinfo->h_addrtype != AF_INET){
        fprintf(stderr,"not an IP host \n ");
        exit(1);
    }

    addrs = hostinfo -> h_addr_list ;
    while (*addrs)
    {
       printf(" %s",inet_ntoa(*(struct in_addr *)*addrs));
       addrs++ ;
    }
    
    printf("\n");
    exit(0);
    
}

到了这里,关于Linux程序设计:套接字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Linux】套接字编程

    【Linux】套接字编程

    目录 套接字 IP + PORT TCP和UDP的介绍 TCP UDP 网络字节序 转换接口 UDP服务器的编写 服务器的初始化  socket bind sockaddr 结构 服务器的运行 数据的收发 业务处理 客户端的编写 运行效果 拓展  🌸首先,我们先思考一个问题, 数据从 A 主机发送到 B 主机是网络通信的最终目的吗 ?

    2024年02月05日
    浏览(14)
  • [Linux]套接字通信

    [Linux]套接字通信

    摘于https://subingwen.cn,作者:苏丙榅 侵删 局域网和广域网 局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。 广域网:又称 广域网 、 外网 、 公网 。 是连接不同地区局域网或城域网计算机通信的远程公共网络。 IP(Internet

    2024年02月09日
    浏览(11)
  • Linux套接字编程

    Linux套接字编程

    在上一篇博客中我们对网络中一些基本概念进行了简单阐述,这一篇博客我们来对套接字编程的内容进行初步了解。 目录 1.引入 2.UDP协议 2.1通信两端流程 2.1.1服务端流程 2.1.2客户端流程 2.2套接字相关操作接口 2.2.1创建套接字 2.2.2为套接字绑定地址信息 2.2.3发送数据 2.2.4接收

    2024年02月02日
    浏览(10)
  • 【Linux】TCP套接字编程

    【Linux】TCP套接字编程

    目录 前言 UDP服务器的完善 线程的封装 结构定义 接口实现 环形队列 结构定义 接口实现 加锁 信号量的申请与释放 入队与出队 整体组装  初始化与析构 信息接收线程 消息发送线程 TCP套接字 创建套接字 listen accept 收发操作 客户端的编写 进一步完善 多进程 多线程 总结 上篇

    2024年02月05日
    浏览(11)
  • 【Linux】网络编程套接字一

    【Linux】网络编程套接字一

    上篇博客由唐僧的例子我们知道: 在IP数据包头部中,有两个IP地址,分别叫做源IP地址,和目的IP地址。 思考一下: 不考虑中间的一系列步骤,两台主机我们光有IP地址就可以完成通信了嘛? 想象一下发qq消息的例子,有了IP地址能够把消息发送到对方的机器上。 但是我们把

    2024年03月26日
    浏览(542)
  • 【Linux】网络---->套接字编程(TCP)

    【Linux】网络---->套接字编程(TCP)

    TCP的编程流程:大致可以分为五个过程,分别是准备过程、连接建立过程、获取新连接过程、消息收发过程和断开过程。 1.准备过程:服务端和客户端需要创建各自的套接字,除此之外服务端还需要绑定自己的地址信息和进行监听。注意:服务端调用listen函数后,处理监听状

    2024年02月04日
    浏览(48)
  • Linux网络编程(二-套接字)

    Linux网络编程(二-套接字)

    目录 一、背景知识 1.1 端口号 1.2 网络字节序 1.3 地址转换函数  二、Socket简介 三、套接字相关的函数  3.1 socket() 3.2 bind() 3.3 connect() 3.4 listen() 3.5 accept()  3.6 read()/recv()/recvfrom() 3.7 send()/sendto()  3.8 close()  四、UPD客服/服务端实验  1.1 端口号 端口号是访问服务器的标识 ,就好像

    2024年01月22日
    浏览(87)
  • Linux网络编程——tcp套接字

    Linux网络编程——tcp套接字

    本章Gitee仓库:tcp套接字 客户端: 客户端: 关于构造和初始化,可以直接在构造的时候,将服务器初始化,那为什么还要写到 init 初始化函数里面呢? 构造尽量简单一点,不要做一些“有风险”的操作。 tcp 是面向连接的,通信之前要建立连接,服务器处于等待连接到来的

    2024年02月20日
    浏览(50)
  • 【Linux】揭开套接字编程的神秘面纱(下)

    【Linux】揭开套接字编程的神秘面纱(下)

    ​🌠 作者:@阿亮joy. 🎆 专栏: 《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 在揭开套接字编程神秘面纱(上)中,我们已经学习到了套接字编程的相关基础知识以及编写了基于 UDP 协议的

    2023年04月12日
    浏览(23)
  • 【Linux】揭开套接字编程的神秘面纱(上)

    【Linux】揭开套接字编程的神秘面纱(上)

    ​🌠 作者:@阿亮joy. 🎆 专栏: 《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 源IP地址和目的IP地址 源 IP 地址指发送方的 IP 地址,而目的 IP 地址是指接收方的 IP 地址,源 IP 地址和目的

    2023年04月09日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包