首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过send()recv(),Socket编程,C发送多个消息

通过send()和recv()函数,可以在Socket编程中实现C语言发送多个消息。

send()函数用于将数据发送到连接的另一端。它的原型如下:

代码语言:c
复制
int send(int sockfd, const void *buf, size_t len, int flags);

参数说明:

  • sockfd:表示连接的套接字描述符。
  • buf:指向要发送数据的缓冲区。
  • len:要发送的数据的字节数。
  • flags:可选参数,用于指定发送操作的行为。

recv()函数用于从连接的另一端接收数据。它的原型如下:

代码语言:c
复制
int recv(int sockfd, void *buf, size_t len, int flags);

参数说明:

  • sockfd:表示连接的套接字描述符。
  • buf:指向接收数据的缓冲区。
  • len:要接收的数据的最大字节数。
  • flags:可选参数,用于指定接收操作的行为。

在C语言中,可以通过循环调用send()函数来发送多个消息,接收端可以通过循环调用recv()函数来接收这些消息。具体的实现代码如下:

发送端:

代码语言:c
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888

int main() {
    int sockfd;
    struct sockaddr_in server_addr;

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("socket");
        exit(1);
    }

    // 设置服务器地址
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(SERVER_PORT);
    server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);

    // 连接服务器
    if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("connect");
        exit(1);
    }

    // 发送多个消息
    char* messages[] = {"Hello", "World", "How", "Are", "You"};
    int num_messages = sizeof(messages) / sizeof(messages[0]);

    for (int i = 0; i < num_messages; i++) {
        if (send(sockfd, messages[i], strlen(messages[i]), 0) < 0) {
            perror("send");
            exit(1);
        }
    }

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

    return 0;
}

接收端:

代码语言:c
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define SERVER_PORT 8888
#define MAX_BUFFER_SIZE 1024

int main() {
    int sockfd, clientfd;
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len;
    char buffer[MAX_BUFFER_SIZE];

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("socket");
        exit(1);
    }

    // 设置服务器地址
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(SERVER_PORT);
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    // 绑定套接字到服务器地址
    if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind");
        exit(1);
    }

    // 监听连接请求
    if (listen(sockfd, 5) < 0) {
        perror("listen");
        exit(1);
    }

    printf("Server listening on port %d...\n", SERVER_PORT);

    // 接收连接请求
    client_addr_len = sizeof(client_addr);
    clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &client_addr_len);
    if (clientfd < 0) {
        perror("accept");
        exit(1);
    }

    printf("Client connected: %s\n", inet_ntoa(client_addr.sin_addr));

    // 接收多个消息
    int num_messages = 5;

    for (int i = 0; i < num_messages; i++) {
        memset(buffer, 0, sizeof(buffer));
        if (recv(clientfd, buffer, sizeof(buffer) - 1, 0) < 0) {
            perror("recv");
            exit(1);
        }
        printf("Received message: %s\n", buffer);
    }

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

    return 0;
}

以上代码演示了如何通过send()和recv()函数在C语言中实现发送多个消息的功能。在实际应用中,可以根据具体需求进行适当的修改和扩展。

相关搜索:第一次发送消息,为什么不能再次发送消息(Android Socket编程)当通过 Socket 发送数据时,send/write 什么时候返回 -1?使用C++通过socket发送键盘输入数据在Python中通过TCP发送/接收多个消息如何使用C++通过反向发送ConverseRequest消息C#通过Gmail编程发送电子邮件在ASP .NET中重试发送通过C#发送的失败消息尝试从arg通过ID发送直接消息时,出现“无法读取未定义的属性' send‘”如何在c sharp中同时通过tcp发送多个文件?C#:如何通过TCP向TCPListener发送用户名、时间和消息当命中服务器的端点时,如何通过socket连接从服务器发送消息?如何使用python通过套接字编程发送多个连续值(即视频帧、信号)在UDP实现中,"recvfrom“from pythons "socket”库无法找到通过以太网电缆成功发送的消息。能否在Python中通过socket编程访问IP摄像头PTZ端口,并向其发送十六进制字节?通过线程之间的环形(循环)缓冲区发送消息(在C中)通过c# .net核心中的套接字连接将图形QL查询作为消息发送如何使用C++套接字编程将数据并发发送到多个服务器?如何通过编程方式将多个文件从android发送到服务器node.js?如何在socket编程C++中使用snprintf的结果并从服务器端发送到客户端如果我不通过TCP套接字从server.c发送数据,为什么我自写dll中的C recv()函数甚至破坏了我的Labview程序
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券