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】套接字编程

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

    2024年02月05日
    浏览(33)
  • 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日
    浏览(33)
  • [Linux]套接字通信

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

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

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

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

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

    2024年03月26日
    浏览(85)
  • 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日
    浏览(32)
  • 【Linux】网络---->套接字编程(TCP)

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

    2024年02月04日
    浏览(42)
  • Linux网络编程——tcp套接字

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

    2024年02月20日
    浏览(37)
  • linux【网络编程】之网络套接字预备

    在【网络基础】中我们提到了IP地址,接下来了解一下网络通信中其他方面的知识 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; 一个端口号只能被一个进程占用 通信原理 (公网)IP唯一标识一台主机,这样两台

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

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

    2023年04月09日
    浏览(93)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包