很早寫的了,感覺有點爛。
// server.cpp 伺服器主要程式邏輯
#include #include #include #include #include #pragma comment(lib, "ws2_32.lib")
static dword __stdcall threadfunc(lpvoid lpparam);
int main()
// 1. 建立socket
socket sockserver = socket(af_inet, sock_stream, 0);
if (sockserver == socket_error)
// 2. 繫結伺服器主機位址
sockaddr_in addrserver;
addrserver.sin_family = af_inet;
addrserver.sin_port = htons(port);
addrserver.sin_addr.s_un.s_addr = htonl(inaddr_any);
// 繫結
if (bind(sockserver, (sockaddr *)&addrserver, sizeof(addrserver)) == socket_error)
// 3. 監聽
listen(sockserver, 10);
// 4. 連線通訊
while (1)
printf("客戶端: %s 連線上來!\n", inet_ntoa(addrclient.sin_addr));
createthread(null, 0, &threadfunc, psockclient, 0, null);
}closesocket(sockserver);
wsacleanup();
return 0;
}// 執行緒函式
static dword __stdcall threadfunc(lpvoid lpparam)
; recv(sockclient, strfile, 4096, 0);
std::ifstream readfile(strfile, std::ios::binary);
if (!readfile)
stru_package strupackage;
int nsendcount = 0;
int ndatapackagecount = 0;
while (1)
readfile.read(strupackage.arrdata + 1, data_size);
strupackage.arrdata[0] = (readfile.eof() ? 1 : 0);
// 當前包中實際位元組數
strupackage.ldatalength = htonl((unsigned long)readfile.gcount());
ndatapackagecount = (int)(sizeof(strupackage.ldatalength) + 1 + readfile.gcount());
nsendcount = send(sockclient, (const char *)&strupackage,
ndatapackagecount, 0);
if (nsendcount < 0)
}readfile.close();
closesocket(sockclient);
return 0;
}
// 客戶端主要程式**
#include #include #include #include #include #pragma comment(lib, "ws2_32.lib")
int main()
#endif
// 1. 建立socket
socket sockclient = socket(af_inet, sock_stream, 0);
if (sockclient == socket_error)
// 2. 準備伺服器位址
//fflush(stdin);
char szserverip[64] = ;
scanf(" %s", szserverip);
sockaddr_in addrserver;
addrserver.sin_family = af_inet;
addrserver.sin_port = htons(port);
addrserver.sin_addr.s_un.s_addr = (inet_addr(szserverip));
// 3. 連線到伺服器
if (connect(sockclient, (const sockaddr *)&addrserver,
sizeof(addrserver)) != 0)
// 4. 與伺服器通訊
char strfile[max_path] = ;
fflush(stdin);
printf("輸入檔名:");
scanf(" %s", strfile);
send(sockclient, strfile, strlen(strfile) + 1, 0);
char *pch = strrchr(strfile, '\\');
(pch == null) ? (pch = strfile) : (++pch);
char strname[max_path] = "d:\\testdir\\";
strcat(strname, pch);
file *fp = fopen(strname, "wb");
if (fp == null)
printf("開始檔案。\n");
stru_package strupackage;
char arrrecvbuff[sizeof(stru_package)] = ;
unsigned long uindex = 0;
while (1)
uindex += nrecvcount;
// 緩衝區中的資料連乙個整數的個數都不到則需要繼續recv
if (uindex < sizeof(strupackage.ldatalength))
continue;
// 前4個字元為資料的字元個數
strupackage.ldatalength = ntohl(*((u_long *)arrrecvbuff));
if (uindex < sizeof(strupackage.ldatalength) + sizeof(char)
+ strupackage.ldatalength )
continue;
// 將資料寫入檔案
size_t sizewrite = 0;
sizewrite = fwrite(
arrrecvbuff + (sizeof(strupackage.ldatalength) + sizeof(char)),
strupackage.ldatalength, 1, fp);
if (sizewrite < 0)
printf("資料寫入錯誤\n");
if (arrrecvbuff[sizeof(strupackage.ldatalength)])
// 移動資料到首部
int nusesize = sizeof(strupackage.ldatalength) + sizeof(char) + strupackage.ldatalength;
int nunusesize = uindex - nusesize;
if (nunusesize > 0)
else
uindex = 0;
}printf("檔案接收完成。\n");
fclose(fp), fp = null;
closesocket(sockclient);
wsacleanup();
return 0;
}
Windows下MySQL zip版的簡單安裝
2 解壓到任意路徑,比如 d programm files 3 進入mysql路徑,複製my small.ini為my.ini,在 mysqld 部分新增 basedir d program files mysql 5.5.10 win32 datadir d program files mysql...
史上最簡單的windows程式
一直想把mfc與sdk聯絡起來,似乎難以直接查到相應的資料.前不久,一位發布了乙個帖子,題為 書上例子也有錯誤嗎?更使得我這個想法變得明確.對於sdk來說,不必這麼複雜.以下是所給出的程式 cpp demo2 2.cpp a message box define win32 lean and mea...
python 實現簡單監控 windows版
按照 一步步操作實現乙個簡單的系統監控 我自己安裝的是python 3.5 和部落格裡面的版本不太一樣 而且博主是用於監控linux系統,我修改了些 可以檢測到windows的資訊 還有個地方是博主用的是mysql,我也懶得裝,我就用sqlit3。先把flask環境搭建好 建個資料庫 from sq...