通过send()和recv()函数,可以在Socket编程中实现C语言发送多个消息。
send()函数用于将数据发送到连接的另一端。它的原型如下:
int send(int sockfd, const void *buf, size_t len, int flags);
参数说明:
recv()函数用于从连接的另一端接收数据。它的原型如下:
int recv(int sockfd, void *buf, size_t len, int flags);
参数说明:
在C语言中,可以通过循环调用send()函数来发送多个消息,接收端可以通过循环调用recv()函数来接收这些消息。具体的实现代码如下:
发送端:
#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;
}
接收端:
#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语言中实现发送多个消息的功能。在实际应用中,可以根据具体需求进行适当的修改和扩展。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云