用C语言,基于TCP协议写一个程序实现两个程序间的通信
时间: 2023-09-18 16:10:19 浏览: 124
好的,下面是一个简单的示例程序,可以实现两个程序间的通信:
服务端程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
#define BUF_SIZE 1024
int main() {
int listenfd, connfd;
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
char buf[BUF_SIZE];
int n;
// 创建 socket
listenfd = socket(AF_INET, SOCK_STREAM, 0);
// 初始化服务器地址结构体
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
// 将 socket 绑定到指定的地址和端口号上
bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
// 开始监听来自客户端的连接请求
listen(listenfd, 5);
printf("Server listening on port %d...\n", PORT);
while (1) {
// 接受客户端的连接请求
cliaddr_len = sizeof(cliaddr);
connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddr_len);
printf("Received a connection from %s:%d\n",
inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
while (1) {
// 读取客户端发送的数据
n = read(connfd, buf, BUF_SIZE);
if (n == 0) {
// 客户端已经关闭连接
printf("Connection closed by the client.\n");
break;
} else if (n < 0) {
// 读取错误
perror("read");
break;
}
// 打印客户端发送的消息
printf("Received message from client: %s\n", buf);
// 发送回复消息给客户端
write(connfd, buf, n);
}
// 关闭连接
close(connfd);
}
// 关闭监听 socket
close(listenfd);
return 0;
}
```
客户端程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERVER_IP "127.0.0.1"
#define PORT 8888
#define BUF_SIZE 1024
int main() {
int sockfd;
struct sockaddr_in servaddr;
char buf[BUF_SIZE];
int n;
// 创建 socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
// 初始化服务器地址结构体
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(SERVER_IP);
servaddr.sin_port = htons(PORT);
// 连接服务器
if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
perror("connect");
exit(1);
}
printf("Connected to server on %s:%d\n", SERVER_IP, PORT);
while (1) {
// 读取用户输入的消息
printf("Enter message to send: ");
fgets(buf, BUF_SIZE, stdin);
// 发送消息给服务器
write(sockfd, buf, strlen(buf));
// 读取服务器发送的回复消息
n = read(sockfd, buf, BUF_SIZE);
if (n == 0) {
// 服务器已经关闭连接
printf("Connection closed by the server.\n");
break;
} else if (n < 0) {
// 读取错误
perror("read");
break;
}
// 打印服务器发送的回复消息
printf("Received message from server: %s\n", buf);
}
// 关闭连接
close(sockfd);
return 0;
}
```
这两个程序可以在不同的终端中编译和运行,实现两个程序间的通信。其中,服务端程序监听指定的端口,等待客户端连接;客户端程序连接到服务端,并发送消息给服务端,等待服务端的回复消息。
阅读全文