IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> socket 编程 -> 正文阅读

[系统运维]socket 编程

一、概述

1、流 socket

在这里插入图片描述

2、报文 socket

在这里插入图片描述

二、UNIX socket

UNIX socket 用于同一主机系统上的应用程序之间通信。
在这里插入图片描述
UNIX socket核心:使用文件系统。

三、Internet socket

Internet socket 用于不同主机系统上的应用程序通信。
在这里插入图片描述
网络字节序:在网络传输中定义的字节序的定义。

四、测试

1、UNIX socket

1、server.c

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>

#define SV_SOCK_PATH "/tmp/unix_test"
#define BUF_LEN 1024

int main(int argc, char* argv[])
{
    char buf[BUF_LEN] = "";
    int buf_len = 0;
    struct sockaddr_un addr;
    int cfd=0;  // 客户端 fd
    int sfd=0;  // 服务端 fd
    // 1、创建服务器 socket
    sfd = socket(AF_UNIX,SOCK_STREAM,0);
    if(sfd == -1){
        return -1;
    }
    // 2、初始化 sockaddr_un 结构体
    if(remove(SV_SOCK_PATH)==-1 && errno!=ENOENT){
        goto ERROTR_RETURN;
    }
    memset(&addr,0,sizeof(struct sockaddr_un));
    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path,SV_SOCK_PATH,sizeof(addr.sun_path)-1);
    // 3、绑定 IP 地址和端口号
    if(bind(sfd,(struct sockaddr*)&addr,sizeof(struct sockaddr_un)) == -1){
        goto ERROTR_RETURN;
    }
    // 4、监听客户端连接
    if(listen(sfd,5) == -1){
        goto ERROTR_RETURN;
    }
    // 5、接收客户端连接
    cfd = accept(sfd,NULL,NULL);
    // 6、收发数据
    while(1){
        memset(buf,0,BUF_LEN);
        buf_len = 0;
        buf_len = recv(cfd,buf,BUF_LEN,0);
        if(buf_len == 0){
            goto CLOSE_RETURN;
        }
        printf("recv data length is %d\n",buf_len);
        printf("data: %s\n",buf);
    }

    return 0;
ERROTR_RETURN:
    close(sfd);
    return -1;
CLOSE_RETURN:
    printf("clietn close!\n");
    close(cfd);
    close(sfd);
    return 0;
}

2、client.c

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>

#define SV_SOCK_PATH "/tmp/unix_test"

int main(int argc, char* argv[])
{
    struct sockaddr_un addr;
    int cfd=0;

    // 1、创建客户端 socket
    cfd = socket(AF_UNIX,SOCK_STREAM,0);
    // 2、初始化 sockaddr_un 结构体
    memset(&addr,0,sizeof(struct sockaddr_un));
    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path,SV_SOCK_PATH,sizeof(addr.sun_path)-1);
    // 3、连接服务器
    if(connect(cfd,(struct sockaddr*)&addr,sizeof(struct sockaddr_un)) == -1){
        goto ERROTR_RETURN;
    }
    // 4、收发数据
    while(1){
        send(cfd,"hello world!",12,0);
        sleep(5);
    }

    return 0;
ERROTR_RETURN:
    close(cfd);
    return -1;
}

3、编译

onlylove@ubuntu:~/my/linux/unix_socket$ ls -l
total 8
-rw-rw-r-- 1 onlylove onlylove  772 Jun  5 19:35 client.c
-rw-rw-r-- 1 onlylove onlylove 1511 Jun  5 19:48 server.c
onlylove@ubuntu:~/my/linux/unix_socket$ gcc -o server server.c 
onlylove@ubuntu:~/my/linux/unix_socket$ gcc -o client client.c 
onlylove@ubuntu:~/my/linux/unix_socket$ ls -l
total 48
-rwxrwxr-x 1 onlylove onlylove 17016 Jun  5 19:53 client
-rw-rw-r-- 1 onlylove onlylove   772 Jun  5 19:35 client.c
-rwxrwxr-x 1 onlylove onlylove 17240 Jun  5 19:53 server
-rw-rw-r-- 1 onlylove onlylove  1511 Jun  5 19:48 server.c
onlylove@ubuntu:~/my/linux/unix_socket$

4、测试
在这里插入图片描述

2、Internet socket

1、server.c

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

#define BUF_LEN 1024

int main(int argc, char* argv[])
{
    char buf[BUF_LEN] = "";
    int buf_len = 0;
    struct sockaddr_in addr;
    int cfd=0;  // 客户端 fd
    int sfd=0;  // 服务端 fd
    // 1、创建服务器 socket
    sfd = socket(AF_INET,SOCK_STREAM,0);
    if(sfd == -1){
        return -1;
    }
    // 2、初始化 sockaddr_un 结构体
    memset(&addr,0,sizeof(struct sockaddr_in));
    addr.sin_family = AF_INET;
    inet_pton(AF_INET,"127.0.0.1",&addr.sin_addr);
    addr.sin_port = htons(8888);
    bzero(&(addr.sin_zero),8);
    // 3、绑定 IP 地址和端口号
    if(bind(sfd,(struct sockaddr*)&addr,sizeof(struct sockaddr_in)) == -1){
        goto ERROTR_RETURN;
    }
    // 4、监听客户端连接
    if(listen(sfd,5) == -1){
        goto ERROTR_RETURN;
    }
    // 5、接收客户端连接
    cfd = accept(sfd,NULL,NULL);
    // 6、收发数据
    while(1){
        memset(buf,0,BUF_LEN);
        buf_len = 0;
        buf_len = recv(cfd,buf,BUF_LEN,0);
        if(buf_len == 0){
            goto CLOSE_RETURN;
        }
        printf("recv data length is %d\n",buf_len);
        printf("data: %s\n",buf);
    }

    return 0;
ERROTR_RETURN:
    close(sfd);
    return -1;
CLOSE_RETURN:
    printf("clietn close!\n");
    close(cfd);
    close(sfd);
    return 0;
}

2、client.c

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

int main(int argc, char* argv[])
{
    struct sockaddr_in addr;
    int cfd=0;

    // 1、创建客户端 socket
    cfd = socket(AF_INET,SOCK_STREAM,0);
    // 2、初始化 sockaddr_un 结构体
    memset(&addr,0,sizeof(struct sockaddr_in));
    addr.sin_family = AF_INET;
    inet_pton(AF_INET,"127.0.0.1",&addr.sin_addr);
    addr.sin_port = htons(8888);
    bzero(&(addr.sin_zero),8);
    // 3、连接服务器
    if(connect(cfd,(struct sockaddr*)&addr,sizeof(struct sockaddr_in)) == -1){
        goto ERROTR_RETURN;
    }
    // 4、收发数据
    while(1){
        send(cfd,"hello world!",12,0);
        sleep(5);
    }

    return 0;
ERROTR_RETURN:
    close(cfd);
    return -1;
}

3、编译

onlylove@ubuntu:~/my/linux/Internet_socket$ ls -l
total 8
-rw-rw-r-- 1 onlylove onlylove  830 Jun  5 21:01 client.c
-rw-rw-r-- 1 onlylove onlylove 1466 Jun  5 21:00 server.c
onlylove@ubuntu:~/my/linux/Internet_socket$ gcc -o server server.c 
onlylove@ubuntu:~/my/linux/Internet_socket$ gcc -o client client.c 
onlylove@ubuntu:~/my/linux/Internet_socket$ ls -l
total 48
-rwxrwxr-x 1 onlylove onlylove 17056 Jun  5 21:06 client
-rw-rw-r-- 1 onlylove onlylove   830 Jun  5 21:01 client.c
-rwxrwxr-x 1 onlylove onlylove 17184 Jun  5 21:06 server
-rw-rw-r-- 1 onlylove onlylove  1466 Jun  5 21:00 server.c
onlylove@ubuntu:~/my/linux/Internet_socket$

4、测试
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-08 19:16:18  更:2022-06-08 19:19:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 23:35:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码