Skip to content

Commit 362ec8c

Browse files
committed
移植
1 parent 56677b4 commit 362ec8c

File tree

5 files changed

+82
-2
lines changed

5 files changed

+82
-2
lines changed

docs/asserts/.DS_Store

0 Bytes
Binary file not shown.

docs/asserts/0310/1.c

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#include <stdio.h>
2+
#include <unistd.h>
3+
#include <errno.h>
4+
#include <string.h>
5+
#include <sys/socket.h>
6+
#include <netinet/in.h>
7+
#include <fcntl.h>
8+
#include "test.h"
9+
10+
#define TEST(c, ...) ((c) ? 1 : (t_error(#c " failed: " __VA_ARGS__), 0))
11+
#define TESTE(c) (errno = 0, TEST(c, "errno = %s\n", strerror(errno)))
12+
13+
int main(void) {
14+
struct sockaddr_in sa = { .sin_family = AF_INET };
15+
int server_fd, client_fd;
16+
char buffer[100];
17+
18+
// 创建 TCP Socket
19+
TESTE((server_fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) >= 0);
20+
21+
// 绑定地址和端口
22+
sa.sin_port = htons(8080); // 使用端口 8080
23+
sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK); // 绑定到本地回环地址
24+
TESTE(bind(server_fd, (struct sockaddr *)&sa, sizeof(sa)) == 0);
25+
26+
// 监听连接
27+
TESTE(listen(server_fd, 1) == 0);
28+
29+
// 获取绑定的地址和端口
30+
socklen_t addrlen = sizeof(sa);
31+
TESTE(getsockname(server_fd, (struct sockaddr *)&sa, &addrlen) == 0);
32+
printf("Server listening on port %d\n", ntohs(sa.sin_port));
33+
34+
// 创建客户端 Socket
35+
TESTE((client_fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) >= 0);
36+
37+
// 连接到服务器
38+
TESTE(connect(client_fd, (struct sockaddr *)&sa, sizeof(sa)) == 0);
39+
40+
// 接受客户端连接
41+
int accepted_fd;
42+
TESTE((accepted_fd = accept(server_fd, (struct sockaddr *)&sa, &addrlen)) >= 0);
43+
44+
// 客户端发送数据
45+
const char *message = "Hello, server!";
46+
TESTE(send(client_fd, message, strlen(message), 0) == strlen(message));
47+
48+
// 服务器接收数据
49+
ssize_t received = recv(accepted_fd, buffer, sizeof(buffer), 0);
50+
TESTE(received >= 0);
51+
buffer[received] = '\0'; // 确保字符串以 null 结尾
52+
TEST(strcmp(buffer, message) == 0, "Received: '%s', Expected: '%s'\n", buffer, message);
53+
54+
// 服务器发送响应
55+
const char *response = "Hello, client!";
56+
TESTE(send(accepted_fd, response, strlen(response), 0) == strlen(response));
57+
58+
// 客户端接收响应
59+
received = recv(client_fd, buffer, sizeof(buffer), 0);
60+
TESTE(received >= 0);
61+
buffer[received] = '\0'; // 确保字符串以 null 结尾
62+
TEST(strcmp(buffer, response) == 0, "Received: '%s', Expected: '%s'\n", buffer, response);
63+
64+
// 关闭 Socket
65+
close(accepted_fd);
66+
close(client_fd);
67+
close(server_fd);
68+
69+
return t_status;
70+
}

docs/asserts/0310/1.jpg

264 KB
Loading

docs/asserts/0310/2.jpg

336 KB
Loading

docs/docs/day/0310.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# day1 (3.10)
22

3-
1. 分析asterinas的net部分的代码
3+
1. 分析asterinas星绽的net部分的代码
44

5-
2. 分析CI测试脚本,准备测试
5+
- 分析和目前我们的arceos项目结构、底层细节的差异
6+
- 编译并运行asterinas(除其readme外的配置外,需要一些额外的环境配置,docker中下载exfatprogs sysbench iperf3 nginx)
7+
![](../../asserts/0310/1.jpg ':class=myImageClass')
8+
![](../../asserts/0310/2.jpg ':class=myImageClass')
9+
10+
11+
2. 分析starry-next的CI测试脚本,准备测试(可能需要在文件管理系统修复后)
12+
13+
3. 完成libc-test之外的一个基础socket测例
14+
15+
[filename](../../asserts/0310/1.c ':include :type=code')

0 commit comments

Comments
 (0)