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 我還是個徹頭徹尾的門外漢,資料...