📜  CC++ 套接字编程(1)

📅  最后修改于: 2023-12-03 14:40:02.556000             🧑  作者: Mango

CC++套接字编程
简介

CC++套接字编程是一种基于网络的通信方法,能够实现进程间的通信和数据传输。该方法之所以被广泛使用,是因为其具有高效、灵活、稳定等特点,因此被广泛应用于互联网、通信和计算机领域。

实现套接字编程的步骤

创建套接字

在CC++中,要使用套接字,必须先创建套接字。创建套接字的方法如下:

int socket(int domain, int type, int protocol);

绑定套接字

创建套接字后,需要绑定套接字到一个具体的地址上,以便可以接收来自特定地址和端口的数据。绑定套接字的方法如下:

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

监听套接字

为了处理客户端的连接请求,需要将套接字设置为监听模式。监听套接字的方法如下:

int listen(int sockfd, int backlog);

接受连接请求

当客户端连接到服务器时,服务器需要调用accept函数来接受连接请求并创建一个新的套接字用于与客户端通信。接收连接请求的方法如下:

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

发送和接收数据

连接建立后,服务器和客户端之间可以相互发送和接收数据。发送数据的方法如下:

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

接收数据的方法如下:

ssize_t recv(int sockfd, void *buf, size_t len, int flags);
程序示例

下面是一个简单的CC++套接字编程示例,它实现了一个简单的客户端和服务器端之间的数据传输:

// 服务器端
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>

#define PORT 8000
#define BACKLOG 5

int main() {
    int sockfd, connfd;
    struct sockaddr_in server, client;
    char buffer[1024];

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) {
        printf("Create socket error!\n");
        exit(-1);
    }

    // 绑定端口号
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = htonl(INADDR_ANY);
    server.sin_port = htons(PORT);
    if (bind(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1) {
        printf("Bind socket error!\n");
        exit(-1);
    }

    // 监听套接字
    if (listen(sockfd, BACKLOG) == -1) {
        printf("Listen socket error!\n");
        exit(-1);
    }

    while (1) {
        // 接受连接请求
        socklen_t addrlen = sizeof(client);
        connfd = accept(sockfd, (struct sockaddr *)&client, &addrlen);
        if (connfd == -1) {
            printf("Accept socket error!\n");
            exit(-1);
        }

        // 处理客户端请求
        recv(connfd, buffer, sizeof(buffer), 0);
        printf("Receive data: %s\n", buffer);

        // 发送数据
        char msg[] = "Hello, client!";
        send(connfd, msg, strlen(msg), 0);

        // 关闭套接字
        close(connfd);
    }

    close(sockfd);
    return 0;
}
// 客户端
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>

#define PORT 8000

int main() {
    int sockfd;
    struct sockaddr_in server;
    char buffer[1024];

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) {
        printf("Create socket error!\n");
        exit(-1);
    }

    // 连接服务器
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    server.sin_port = htons(PORT);
    if (connect(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1) {
        printf("Connect socket error!\n");
        exit(-1);
    }

    // 发送数据
    char msg[] = "Hello, server!";
    send(sockfd, msg, strlen(msg), 0);

    // 接收数据
    recv(sockfd, buffer, sizeof(buffer), 0);
    printf("Receive data: %s\n", buffer);

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

    return 0;
}
总结

CC++套接字编程是一种基于网络的通信方法,能够实现进程间的通信和数据传输。在使用套接字编程时,需要先创建套接字,然后绑定套接字到一个具体的地址上,接着将套接字设置为监听模式,等待客户端连接请求。当客户端连接到服务器时,服务器需要调用accept函数来接受连接请求并创建一个新的套接字用于与客户端通信。连接建立后,服务器和客户端之间可以相互发送和接收数据。