TLV資料傳輸例項

2021-08-19 18:05:02 字數 3682 閱讀 7836

tlv標頭檔案

#ifndef __tlv_h__

#define __tlv_h__

//傳送命令的型別(獲取檔案列表還是指定檔案)

enum type_t;

enum send_status_t;

//傳送資料的命令頭結構

typedef structcmd_head_t;

//傳送的檔案頭部資訊

typedef structfile_head_t;

enum is_start_t;

typedef struct

client_info_t;

#endif

伺服器示例

#include #include #include #include #include #include #include #include #include #include #include #include "tlv.h"

#define max_size 512

int send_data(int sockfd, char *data, int len)

return -1;

} total_len += recv_len;

} return 0;

}int recv_data(int sockfd, char *data, int len)

usleep(1000);

continue;

} }return recv_len;

}int main(int argc, char *argv)

server_addr.sin_family = af_inet;

server_addr.sin_port = htons(9000);

server_addr.sin_addr.s_addr = inet_addr("192.168.121.128");

int opt = 1;

if(setsockopt(sockfd, sol_socket,so_reuseaddr, (const void *)&opt, sizeof(opt)))

int len = sizeof(struct sockaddr_in);

ret = bind(sockfd, (struct sockaddr*)&server_addr, len);

if (ret == -1)

ret = listen(sockfd, max_size);

if (ret < 0)

char buff[max_size] = ;

char filename[256] =;

file_head_t fh;

int flag;

int opret = -1;

while (1)

printf("new client--ip:[%s], port:[%d]\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));

while (1)

}else if (((int)flag) == send_fbody)else if (((int)flag) == send_fover)

//printf("recv_len = %d\n", recv_len);

if (recv_len == max_size)

} close(client_sockfd);

} close(opret);

close(sockfd);

return 0;

}

客戶端示例

#include #include #include #include #include #include #include #include #include #include #include #include "tlv.h"

#define max_size 512

int recv_data(int sockfd, char *data, int len)

usleep(1000);

continue;

} if (recv_len != len)

} return 0;

}int send_data(int sockfd, char *data, int len)

return -1;

} total_len += recv_len;

} return total_len;

}int main(int argc, char *argv)

server_addr.sin_family = af_inet;

server_addr.sin_port = htons(9000);

server_addr.sin_addr.s_addr = inet_addr("192.168.121.128");

client_addr.sin_family = af_inet;

client_addr.sin_port = htons(8000);

client_addr.sin_addr.s_addr = inet_addr("192.168.121.128");

int opt = 1;

if(setsockopt(sockfd, sol_socket,so_reuseaddr, (const void *)&opt, sizeof(opt)))

int len = sizeof(struct sockaddr_in);

ret = bind(sockfd, (struct sockaddr*)&client_addr, len);

if (ret == -1)

ret = connect(sockfd, (struct sockaddr*)&server_addr, len);

if (ret < 0)

int opret;

//開啟要傳送的檔案

if ((opret = open("./hehe.txt", o_rdonly)) < 0)

//設定客戶端資訊

client_info_t *pci;

pci = (client_info_t *)malloc(sizeof(client_info_t));

pci->sock_fd = sockfd;

pci->file_fd = opret;

pci->send_status = send_fhead; //傳送檔案頭資訊

file_head_t fh;

memset(&fh, 0x00, sizeof(file_head_t));

memcpy(fh.fname, "hehe.txt", strlen("hehe.txt"));

fh.flen = strlen("hehe.txt");

int send_len = max_size;

char buff[max_size] = ;

int i = 0, s_len;

while (1)else if (pci->send_status == send_fbody)

}}else if (pci->send_status == send_fover)

} close(sockfd);

return 0;

}

C SFTP資料傳輸

我們有些客戶公司的資料比較重要,為了安全集團公司內部都使用的是區域網,但是有時候又不得不予外界網際網路做資料互動,所以有些不重要的系統是放在外界網際網路的,這樣以來內部系統和外部系統的資料互動就成為了問題,這樣以來就使用到了sftp伺服器來作為資料傳輸的中介。下面不說了,直接上c 此處使用了第三方動...

資料傳輸方式

資料傳輸方式 1 並行傳輸與序列傳輸 並行傳輸指的是資料以成組的方式,在多條並行通道上同時進行傳輸。常用的就是將構成一 個字元 的幾位二進位製碼,分別在幾個並行通道上進行傳輸。例如,採用8單位 的字 符 可以用8個通道並行傳輸。一次傳送乙個字元,因此收 發雙方不存在字元的同步問題,不需要另加 起 止...

flex wcf 資料傳輸

最近跟哲子做個專案,本來可以用asp.net輕鬆搞定,但是鑑於大家都比較想試用下學習已久的技術,所以便出現了flex與wcf entity這樣得前後臺組合。專案開始之初,著實為兩者之間的互動頭疼一番,在經過大量資料得獲取後,終於解決,以下寫出簡要的注意事項,由於wcf 我還是個徹頭徹尾的門外漢,資料...