Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ socket编程

作者:狂暴的酷   发布日期:2025-12-28   浏览:104

#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>

// 定义服务器端口和地址
#define SERVER_PORT 8080
#define SERVER_IP "127.0.0.1"

void error(const char *msg) {
    perror(msg);
    exit(1);
}

int main() {
    int sockfd, newsockfd, portno;
    socklen_t clilen;
    char buffer[256];
    struct sockaddr_in serv_addr, cli_addr;
    int n;

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
        error("ERROR opening socket");

    // 绑定套接字到本地地址
    bzero((char *) &serv_addr, sizeof(serv_addr));
    portno = SERVER_PORT;
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);
    if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
        error("ERROR on binding");

    // 监听连接请求
    listen(sockfd, 5);
    clilen = sizeof(cli_addr);

    // 接受客户端连接
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    if (newsockfd < 0)
        error("ERROR on accept");

    // 读取客户端发送的数据
    bzero(buffer, 256);
    n = read(newsockfd, buffer, 255);
    if (n < 0)
        error("ERROR reading from socket");
    printf("Here is the message: %s\n", buffer);

    // 向客户端发送数据
    n = write(newsockfd, "I got your message", 18);
    if (n < 0)
        error("ERROR writing to socket");

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

    return 0;
}

解释说明:

  1. 创建套接字socket() 函数用于创建一个套接字,返回一个文件描述符。AF_INET 表示使用 IPv4 地址族,SOCK_STREAM 表示使用 TCP 协议。

  2. 绑定套接字bind() 函数将套接字绑定到指定的 IP 地址和端口号。INADDR_ANY 表示监听所有可用的网络接口。

  3. 监听连接请求listen() 函数使套接字进入监听状态,等待客户端连接请求。参数 5 表示最大等待队列长度。

  4. 接受客户端连接accept() 函数阻塞等待客户端连接请求,成功后返回一个新的文件描述符,用于与客户端通信。

  5. 读取客户端数据read() 函数从套接字中读取数据到缓冲区。

  6. 向客户端发送数据write() 函数通过套接字向客户端发送数据。

  7. 关闭套接字close() 函数关闭套接字,释放资源。

以上代码展示了如何使用 C++ 进行简单的 TCP 套接字编程,实现服务器端的基本功能。

上一篇:c++面向过程还是面向对象

下一篇:c++ 学习

大家都在看

c++闭包

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++格式化字符串

c++ orm框架

c++ random函数用法

队列c++

c++freopen怎么用

c++virtual

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站