簡單的C S 程式 windows 版

2021-07-02 04:28:31 字數 4025 閱讀 9767

很早寫的了,感覺有點爛。

// 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...