日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Bug(1)

發布時間:2024/4/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Bug(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序要求:內網之間客戶端截屏(.bmp)并傳送給服務端。

server:

#include <winsock2.h> // 為了使用Winsock API函數 #include <stdio.h> #include <windows.h>#include<fstream> using namespace std;// 告訴連接器與WS2_32庫連接 #pragma comment(lib,"WS2_32.lib")DWORD rem=0,num=0; void stranl(char *_str) {char _rem[16];char _num[32];int i,j=0;for(i=0;_str[i]!='#';i++){_num[i]=_str[i];}_num[i]='\0';i++;for(;_str[i]!='\0';i++){_rem[j]=_str[i];j++;}_rem[j]='\0';num=atoi(_num);rem=atoi(_rem);} int main(int argc, char* argv[]) {// 初始化WS2_32.dll WSADATA wsaData;WORD sockVersion = MAKEWORD(2, 0);::WSAStartup(sockVersion, &wsaData);// 創建套節字SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(s == INVALID_SOCKET){printf("Failed socket() \n");::WSACleanup();return 0;}// 填充sockaddr_in結構 sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.S_un.S_addr = INADDR_ANY;// 綁定這個套節字到一個本地地址if(::bind(s, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR){printf("Failed bind() \n");::WSACleanup();return 0;}// 進入監聽模式if(::listen(s, 2) == SOCKET_ERROR){printf("Failed listen()");::WSACleanup();return 0;}// 循環接受客戶的連接請求 sockaddr_in remoteAddr; int nAddrLen = sizeof(remoteAddr);SOCKET client;char szCmd[32];char szNumRem[32];int i;char block[1024];int BlkSize=0,allNum=0;char *allData=NULL;DWORD BmpSize=0;int nSize=0;while(TRUE){// 接受一個新連接client = ::accept(s, (SOCKADDR*)&remoteAddr, &nAddrLen);if(client == INVALID_SOCKET){printf("Failed accept()");continue;}printf("接受到一個連接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));while(1){printf("請輸入命令:\n");scanf("%s",szCmd);//分析命令if(0!=strcmp(szCmd,"q")) //如果不是退出命令,則: {if(0==strcmp(szCmd,"scrshot")) // 如果是截屏命令,則: {// 向客戶端發送命令,讓其做好準備::send(client, szCmd, strlen(szCmd), 0);nSize = ::recv(client, szNumRem, 32, 0);if(nSize > 0){szNumRem[nSize]='\0';//解析字符串printf("字符串:%s,大小:%d\n",szNumRem,nSize);stranl(szNumRem);printf("次數:%d,余數:%d\n",num,rem);BmpSize=num*1024+rem;allData = new char[BmpSize];}printf("輸入開始命令:");scanf("%s",szCmd);::send(client, szCmd, strlen(szCmd), 0);for(i=0;i<num;i++){BlkSize = ::recv(client, block, 1024, 0);//if(BlkSize==1024)if(1){memcpy(allData+1024*i,block,1024);}else{printf("我擦!\n");system("pause");}}BlkSize = ::recv(client, block, 1024, 0);if(BlkSize==rem){memcpy(allData+1024*i,block,rem);}ofstream of("ClicentScreenShot.bmp",ios_base::binary);of.write(allData,BmpSize);printf("已完全接收圖片!\n");}}elsebreak;}// 關閉同客戶端的連接 ::closesocket(client);}// 關閉監聽套節字 ::closesocket(s);// 釋放WS2_32庫 ::WSACleanup(); return 0; }

client:

#include <winsock2.h> // 為了使用Winsock API函數 #include <stdio.h> #include <windows.h> #include<fstream> using namespace std; // 告訴連接器與WS2_32庫連接 #pragma comment(lib,"WS2_32.lib")char *allData=NULL; DWORD BmpSize=0; int main(int argc, char* argv[]) {// 初始化WS2_32.dll WSADATA wsaData;WORD sockVersion = MAKEWORD(2, 0);::WSAStartup(sockVersion, &wsaData);// 創建套節字SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(s == INVALID_SOCKET){printf("Failed socket() \n");::WSACleanup();return 0;}// 也可以在這里調用bind函數綁定一個本地地址// 否則系統將會自動安排// 填寫遠程地址信息 sockaddr_in servAddr; servAddr.sin_family = AF_INET;servAddr.sin_port = htons(8888);// 注意,這里要填寫服務器程序(10ServerDemo程序)所在機器的IP地址// 如果你的計算機沒有聯網,直接使用127.0.0.1即可servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1){printf("Failed connect() \n");::WSACleanup();return 0;}// 接收命令char szCmdBuff[32];char str[32];char tmp[16];int i,j;char block[1024];int nRecv = ::recv(s, szCmdBuff, 32, 0);if(nRecv > 0){szCmdBuff[nRecv] = '\0';printf("接收到命令:%s\n", szCmdBuff);}//命令處理if(0==strcmp(szCmdBuff,"scrshot")) {//截屏,并計算圖像大小 _ScreenSnap();//每次發送1024字節,計算發送次數及剩余字節數//格式: 次數#余數DWORD rem=BmpSize%1024;DWORD num=BmpSize/1024;itoa(num,str,10);strcat(str,"#");itoa(rem,tmp,10);strcat(str,tmp);printf("字符串:%s\n",str);::send(s, str, strlen(str), 0);::recv(s, szCmdBuff, 32, 0);if(0==strcmp(szCmdBuff,"start")){for(i=0;i<num;i++){for(j=0;j<1024;j++)block[j]=allData[i*1024+j];::send(s,block,1024,0);}for(j=0;j<rem;j++)block[j]=allData[num*1024+j];::send(s,block,num,0);}}// 關閉套節字 ::closesocket(s);// 釋放WS2_32庫 ::WSACleanup(); return 0; }

結果:

轉載于:https://www.cnblogs.com/qiangua/p/3670813.html

總結

以上是生活随笔為你收集整理的Bug(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。