開源夏令營第七周 lwip穩定性測試

2021-06-23 09:21:05 字數 3160 閱讀 9209

將龍芯2f筆記本作為tcp client,開發板作為 tcp server

筆記本構造隨機長度(長度在1-1000之間)的隨機字串,tcp server作為回顯伺服器

利用單執行緒的阻塞模型,測試了3*24小時 一切收發正常,傳送420658個字串,接收420658個字串,平均來看乙個字串有0.5kb.

client端的測試**如下:

#include #include #include #include #include #include #include #include #include #include #include #define port "10001"

#define servaddr "fe80::200:eff:fe12:3456%eth1"

//static const char send_data = "this is tcp client from debian.";

void setrandstr(char str, int number);

int main(void)

; struct addrinfo *res;

int get_err;

int sockfd;

int sendnum, recvnum;

int number;

char send_data[1024];

char buffer[1024];

int enable = 1;

hints.ai_family = af_inet6;

hints.ai_socktype = sock_stream;

get_err = getaddrinfo(servaddr, port, &hints, &res);

if(get_err)

sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);

if(sockfd < 0)

setsockopt(sockfd, ipproto_tcp, tcp_nodelay, (void *)&enable, sizeof(enable));

if(connect(sockfd, res->ai_addr, res->ai_addrlen) < 0)

sendnum = 0; recvnum = 0;

while(1)

close(sockfd);

return 0;

}// 產生隨機字串

void setrandstr(char str, int number)

str[number] = '\0';

// printf("%s\n", str);

}

server的測試**如下:

#include #include #define serv_port 10001

#define buf_size 1024

#define backlog 5

//static const char send_data = "this is tcp server from rt-thread.";

void tcp_robust_test(void *parameter)

if((sockfd = socket(pf_inet6, sock_stream, 0)) == -1)

server_addr6.sin6_family = af_inet6;

memcpy(server_addr6.sin6_addr.s6_addr, ip6_addr_any, 16);

server_addr6.sin6_port = htons(serv_port);

if(bind(sockfd, (struct sockaddr *)&server_addr6, sizeof(struct sockaddr)) == -1)

if(listen(sockfd, backlog) == -1)

// rt_sprintf(recv_data, "%4d", serv_port);

// rt_kprintf("\ntcpserver waiting for client on port %s...\n", recv_data);

while(stop != rt_true)

// send(clientfd, send_data, strlen(send_data), 0);

bytes_received = recv(clientfd, recv_data, buf_size, 0);

if(bytes_received <= 0)

recv_data[bytes_received] = '\0';

// if(strcmp(recv_data, "q") == 0 || strcmp(recv_data, "q") == 0)

//

// else if(strcmp(recv_data, "exit") == 0)

//

// else

//

send(clientfd, recv_data, strlen(recv_data), 0);

rt_free(recv_data);

// memset(recv_data, 0, sizeof(recv_data));

} }closesocket(sockfd);

rt_free(recv_data);

return ;

}int tcp_robust_init()

else

}

要寫ping 的程式必須使用bsd 原始套接字,原理為:某一主機向網路上主機傳送icmp請求報文,如果系統得到了報文會將報文一模一樣的傳給傳送者。在ipv6中須使用icmpv6過濾器,因為相鄰的主機會發來鄰居請求報文,這是icmpv6型別的,如下所示:

但是lwip-head並未實現如下icmpv6過濾器

但是可以根據接收到的pid號來判斷是否是本主機發出的icmp request包的反饋。

未完待續。。

開源夏令營(1)

前段時間主要做了git的一些配置和熟悉 git pull 從其他的版本庫 既可以是遠端的也可以是本地的 將 更新到本地。git add 是將當前更改或者新增的檔案加入到git的索引中,加入到git的索引中就表示記入了版本歷史中,這也是提交之前所需要執行的一步 git rm 從當前的工作空間中和索引中...

開源夏令營總結

時間過得很快,開源夏令營就要結束了,今天就簡單總結一下這段時間的所學所做。1.研究源 因為專案已經有一定規模,所以第一步肯定是要先弄懂現有專案結構和 邏輯。view層負責把資料顯示出來,包括每一幀的具體資料,和骨骼父子關係等 model,collection會負責資料的驗證和訪問。每當使用者操作時,...

開源夏令營(8)

例如拿標題來舉例,以下兩段 是等效的 一 php the title 二 php echo get the title 注意the permalink 對應的是get permalink 沒有 the 模板標籤大全 常用的模板標籤 php the content 日誌內容 php the title...