將龍芯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...