linux中socket编程实现一端可循环向另一端传送字符串
时间: 2024-03-22 16:41:25 浏览: 15
好的,我可以帮你回答这个问题。在Linux中,我们可以使用socket编程实现两个进程之间的通信,其中一个进程作为客户端,另一个进程作为服务器端。
下面是一个简单的例子,实现了客户端向服务器端发送字符串的功能。
服务器端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080
#define MAXLINE 1024
int main() {
int sockfd;
char buffer[MAXLINE];
char *hello = "Hello from server";
struct sockaddr_in servaddr, cliaddr;
// 创建 socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
// 绑定地址和端口号
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(PORT);
bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr));
int len, n;
len = sizeof(cliaddr); // 计算结构体大小
while (1) {
n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL, ( struct sockaddr *) &cliaddr, &len);
buffer[n] = '\0';
printf("Client : %s\n", buffer);
sendto(sockfd, (const char *)hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *) &cliaddr, len);
printf("Hello message sent.\n");
}
return 0;
}
```
客户端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8080
#define MAXLINE 1024
int main() {
int sockfd;
char buffer[MAXLINE];
char *hello = "Hello from client";
struct sockaddr_in servaddr;
// 创建 socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
// 设置服务器地址和端口号
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
int n, len;
// 循环发送字符串
while (1) {
printf("Enter string to send : ");
fgets(buffer, MAXLINE, stdin);
sendto(sockfd, (const char *)buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr *) &servaddr, sizeof(servaddr));
printf("Message sent.\n");
n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL, (struct sockaddr *) &servaddr, &len);
buffer[n] = '\0';
printf("Server : %s\n", buffer);
}
close(sockfd);
return 0;
}
```
这个例子使用了 UDP 协议进行通信,服务器端使用了 `recvfrom()` 函数从客户端接收数据,然后使用 `sendto()` 函数向客户端发送数据。客户端使用了 `fgets()` 函数从终端读取字符串,然后使用 `sendto()` 函数向服务器端发送数据,然后使用 `recvfrom()` 函数从服务器端接收数据。
这个例子可以循环执行,不断地发送和接收数据。