linux中socket编程实现一端可循环向另一端传送字符串
时间: 2024-03-22 17:41:53 浏览: 114
linux下的socket编程
好的,这是一个关于socket编程的问题。我会尽力回答你的问题,但是由于篇幅有限,可能无法覆盖所有方面。如果你有任何疑问,请随时追问。
首先,socket是一种通信协议,它允许程序通过网络进行通信。在Linux中,我们可以使用socket编程来实现网络通信。具体来说,我们需要创建一个socket对象,然后使用它来接收和发送数据。
以下是一个简单的例子,它实现了一个可循环向另一端传送字符串的程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define BUF_SIZE 1024
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888
int main() {
int sockfd;
struct sockaddr_in server_addr;
// 创建socket对象
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockfd == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
// 设置服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
server_addr.sin_port = htons(SERVER_PORT);
// 连接服务器
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("connect");
exit(EXIT_FAILURE);
}
// 循环发送数据
char buf[BUF_SIZE];
while (1) {
printf("请输入要发送的字符串:");
fgets(buf, BUF_SIZE, stdin);
// 发送数据
if (send(sockfd, buf, strlen(buf), 0) == -1) {
perror("send");
exit(EXIT_FAILURE);
}
// 接收数据
memset(buf, 0, BUF_SIZE);
if (recv(sockfd, buf, BUF_SIZE, 0) == -1) {
perror("recv");
exit(EXIT_FAILURE);
}
printf("收到服务器回复:%s\n", buf);
}
// 关闭socket
close(sockfd);
return 0;
}
```
这个程序通过socket连接到一个服务器,然后循环接收用户输入的字符串,并发送到服务器。服务器收到数据后,将其转换为大写字母,并发送回客户端,客户端再将其打印出来。
当然,这个程序只是一个简单的例子,实际上socket编程还涉及到很多其他的问题,比如错误处理、并发处理等等。但是,我希望这个例子可以帮助你入门socket编程,如果你有任何疑问,请随时追问。
阅读全文