当前位置:实例文章 » JAVA Web实例» [文章]TCP/IP网络编程 第十五章:套接字和标准I/O

TCP/IP网络编程 第十五章:套接字和标准I/O

发布人:shili8 发布时间:2025-01-18 09:33 阅读次数:0

**第十五章:套接字和标准I/O**

在前面的章节中,我们已经学习了如何使用 TCP/IP 协议栈来实现网络通信。然而,在实际的应用中,我们经常需要将标准 I/O 流(如文件输入输出)与套接字结合起来,实现更复杂的网络编程需求。在本章中,我们将介绍如何使用套接字和标准 I/O 来实现这些功能。

**1. 套接字和标准I/O**

在 Unix/Linux 中,标准 I/O 流(stdin、stdout 和 stderr)都是通过文件描述符来实现的。套接字也是一个文件描述符,因此我们可以使用标准 I/O 函数来操作套接字。

**2. 使用套接字和标准I/O**

下面是一个简单的例子,演示了如何使用套接字和标准 I/O 来读取数据:

c#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
 int sockfd = socket(AF_INET, SOCK_STREAM,0);
 if (sockfd < 0) {
 perror("socket");
 exit(1);
 }

 struct sockaddr_in server_addr;
 server_addr.sin_family = AF_INET;
 server_addr.sin_port = htons(8080);
 inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);

 if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
 perror("connect");
 exit(1);
 }

 char buffer[1024];
 int n = read(sockfd, buffer,1024);
 if (n < 0) {
 perror("read");
 exit(1);
 }
 printf("%s
", buffer);

 close(sockfd);
 return0;
}

在这个例子中,我们首先创建一个套接字,然后连接到服务器。接着,我们使用 `read` 函数从套接字读取数据,并将其打印到标准输出流(stdout)。

**3. 使用套接字和标准I/O进行写操作**

同样,我们可以使用套接字和标准 I/O 来进行写操作。下面是一个例子:
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
 int sockfd = socket(AF_INET, SOCK_STREAM,0);
 if (sockfd < 0) {
 perror("socket");
 exit(1);
 }

 struct sockaddr_in server_addr;
 server_addr.sin_family = AF_INET;
 server_addr.sin_port = htons(8080);
 inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);

 if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
 perror("connect");
 exit(1);
 }

 char buffer[] = "Hello, world!";
 int n = write(sockfd, buffer, strlen(buffer));
 if (n < 0) {
 perror("write");
 exit(1);
 }
 printf("Sent %d bytes
", n);

 close(sockfd);
 return0;
}

在这个例子中,我们首先创建一个套接字,然后连接到服务器。接着,我们使用 `write` 函数将数据写入套接字,并打印出发送的字节数。

**4. 使用套接字和标准I/O进行读写操作**

最后,我们可以使用套接字和标准 I/O 来实现读写操作。下面是一个例子:
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
 int sockfd = socket(AF_INET, SOCK_STREAM,0);
 if (sockfd < 0) {
 perror("socket");
 exit(1);
 }

 struct sockaddr_in server_addr;
 server_addr.sin_family = AF_INET;
 server_addr.sin_port = htons(8080);
 inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);

 if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
 perror("connect");
 exit(1);
 }

 char buffer[1024];
 int n = read(sockfd, buffer,1024);
 if (n < 0) {
 perror("read");
 exit(1);
 }
 printf("%s
", buffer);

 char send_buffer[] = "Hello, server!";
 int m = write(sockfd, send_buffer, strlen(send_buffer));
 if (m < 0) {
 perror("write");
 exit(1);
 }
 printf("Sent %d bytes
", m);

 close(sockfd);
 return0;
}

在这个例子中,我们首先创建一个套接字,然后连接到服务器。接着,我们使用 `read` 函数从套接字读取数据,并将其打印到标准输出流(stdout)。然后,我们使用 `write` 函数将数据写入套接字,并打印出发送的字节数。

**结论**

在本章中,我们学习了如何使用套接字和标准 I/O 来实现网络编程需求。我们通过几个例子来演示了如何使用套接字和标准 I/O 进行读取、写入和读写操作。这些例子可以帮助您理解如何将标准 I/O 流与套接字结合起来,实现更复杂的网络编程需求。

其他信息

其他资源

Top