|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include"fileOperation.h"
- long g_fileSize; //ļСȫֱʼΪ
- //long g_fileSize = 11152;
- char *g_fileBuf; //ļ
- char g_recvBuf[1024]; //ļС
- //int main()
-
-
- bool readFile(struct MsgHeader* pmsg)
- {
- FILE* read = fopen(pmsg->fileInfo.fileName, "rb"); //ļָ룬rbΪƷʽ
- if (!read) //ȡΪ
- {
- perror("ļȡʧ\n");
- printf("Ҳ[%s]ļ...\n", pmsg->fileInfo.fileName);
- struct MsgHeader msg = { .msgID = MSG_OPENFILE_FAILD };
- return false;
- }
-
- //ȡļСλֽ
- fseek(read, 0, SEEK_END); //ļλָƶ
- g_fileSize = ftell(read); //ftellȡǰļλָ
- fseek(read, 0, SEEK_SET); //ƶͷ
- printf("filesize:%d\n", g_fileSize);
-
- //ڴ
- g_fileBuf = calloc(g_fileSize, sizeof(char)); //callocڴȫʼΪ0
- if (!g_fileBuf)
- {
- return false;
- }
- //ļڴ
- fread(g_fileBuf, sizeof(char), g_fileSize, read);
-
- fclose(read);
- return true;
- }
-
- bool sendFile(SOCKET s, struct MsgHeader* pmsg)
- {
- readFile(pmsg); //ȥserverٶļ
- //ļƺʹСͻ
- struct MsgHeader msg = { .msgID = MSG_FILESIZE,.fileInfo.fileSize = g_fileSize };
- //fileName = C:\Users\Katherine\Desktop\TyporaHotKey.ahk
-
- char tfname[200] = { 0 }, text[100]; //tfnameļTyporaHotKeytext.ahk
- _splitpath(pmsg->fileInfo.fileName, NULL, NULL, tfname, text); //ָ·
- strcat(tfname, text); //ƴΪTyporaHotKey.ahktfname
- strcpy(msg.fileInfo.fileName, tfname); //msg.fileInfo.fileName
-
- //int ret1 = send(s, //
- int ret2 = send(s, (char*)&msg, sizeof(struct MsgHeader), 0); //С
-
- //ļg_fileBufҪӦò
- int ret = send(s, g_fileBuf, msg.fileInfo.fileSize,0); //ʵʷ͵ļСret
- if (ret == SOCKET_ERROR)
- {
- err("sendFile");
- return false;
- }
- printf("ͳɹ(%d)Byte\n", ret);
-
- return true;
- }
-
- void downloadFileName(SOCKET serfd)
- {
- char fileName[1024] = "ãǸڵ̩ɽ~";
- gets_s(fileName, 1023); //ȡҪصļ
-
- struct MsgHeader file = { .msgID = MSG_FILENAME };
- strcpy(file.fileInfo.fileName, fileName);
-
- send(serfd, (char*)&file, sizeof(struct MsgHeader), 0);
-
- }
-
- bool recvFile(SOCKET s)
- {
- //ļС
- recv(s, g_recvBuf, 1023, 0);
- struct MsgHeader* msg = (struct MsgHeader*)g_recvBuf;
- printf("յļСΪ(%d)Byte\n", msg->fileInfo.fileSize);
- //strcpy(msg->fileInfo.fileName, pmsg->fileInfo.fileName);
- //ļʱҪڴ棡
- if (g_fileBuf == NULL)
- {
- g_fileBuf = calloc(msg->fileInfo.fileSize, sizeof(char));
- if (!g_fileBuf)
- {
- return false;
- }
- }
- int ret = recv(s, g_fileBuf, msg->fileInfo.fileSize, 0);
- //int ret = recv(s, g_fileBuf, 1023, 0);
- if (ret == 0)
- {
- printf("...\n");
- }
- else if (ret < 0)
- {
- err("recv");
- }
- saveFile(msg);
- return true;
- }
-
- bool saveFile(struct MsgHeader* pmsg)
- {
- FILE* write = fopen(&(pmsg->fileInfo.fileName), "wb"); //ļָ룬wbֻд
- if (!write) //ȡΪ
- {
- perror("ļȡʧ\n");
- return false;
- }
-
- fwrite(g_fileBuf, sizeof(char), pmsg->fileInfo.fileSize, write);
-
- fclose(write);
- return true;
- }
|