Опытный
 
Профиль
Группа: Участник
Сообщений: 332
Регистрация: 14.7.2011
Репутация: нет Всего: нет
|
Решил пересобрать проект. не понимаю что не так сделал.теперь появляются такие ошибки: Код | 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSACleanup@0 в функции "public: __thiscall WComm::WComm(void)" (??0WComm@@QAE@XZ) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSAGetLastError@0 в функции "public: __thiscall WComm::WComm(void)" (??0WComm@@QAE@XZ) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__socket@12 в функции "public: __thiscall WComm::WComm(void)" (??0WComm@@QAE@XZ) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSAStartup@8 в функции "public: __thiscall WComm::WComm(void)" (??0WComm@@QAE@XZ) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__connect@12 в функции "public: void __thiscall WComm::connectServer(char *,int)" (?connectServer@WComm@@QAEXPADH@Z) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__htons@4 в функции "public: void __thiscall WComm::connectServer(char *,int)" (?connectServer@WComm@@QAEXPADH@Z) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__inet_addr@4 в функции "public: void __thiscall WComm::connectServer(char *,int)" (?connectServer@WComm@@QAEXPADH@Z) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__listen@8 в функции "public: void __thiscall WComm::startServer(int)" (?startServer@WComm@@QAEXH@Z) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__bind@12 в функции "public: void __thiscall WComm::startServer(int)" (?startServer@WComm@@QAEXH@Z) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__accept@12 в функции "public: void __thiscall WComm::waitForClient(void)" (?waitForClient@WComm@@QAEXXZ) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__send@16 в функции "public: int __thiscall WComm::sendData(char *)" (?sendData@WComm@@QAEHPAD@Z) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__recv@16 в функции "public: int __thiscall WComm::recvData(char *,int)" (?recvData@WComm@@QAEHPADH@Z) 1>wcomm.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__closesocket@4 в функции "public: void __thiscall WComm::closeConnection(void)" (?closeConnection@WComm@@QAEXXZ) 1
|
вот код wcom.h Код |
#include "winsock2.h" #include <stdio.h> #include <conio.h> #include <iostream> #include <fstream> #include <tchar.h> #include <strsafe.h> #include <string> #include <cstring> #include<windows.h> #ifndef WCOME_H #define WCOME_H class WComm {
public:
WComm();
void connectServer(char*,int); int sendData(char*); int recvData(char*,int); void fileSend(char*); void fileReceive(char*); void startServer(int); void waitForClient(); void closeConnection(); };
#endif
|
wcom.cpp Код | #include "wcomm.h"
WSADATA wsaData; SOCKET m_socket; SOCKET m_backup; sockaddr_in con; SOCKET AcceptSocket; using namespace std;
BOOL GetLastWriteTime(HANDLE hFile, LPTSTR lpszString, DWORD dwSize); //всем WComm::WComm() {
// Initialize Winsock. int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if ( iResult != NO_ERROR ) printf("Error at WSAStartup()\n");
// Create a socket. // AF_INET - сокет Интернета // SOCK_STREAM - потоковый сокет (с установкой соединения) // 0 - по умолчанию выбирается TCP протокол m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( m_socket == INVALID_SOCKET ) { printf( "Error at socket(): %ld\n", WSAGetLastError() ); WSACleanup(); return; } //копируем сокет m_backup = m_socket;
}
// Good Programmer don't comment this //WComm::~WComm(){WSACleanup();}
void WComm::connectServer(char *ip,int port) { // Connect to a server. con.sin_family = AF_INET; con.sin_addr.s_addr = inet_addr( ip ); con.sin_port = htons( port );
if ( connect( m_socket, (SOCKADDR*) &con, sizeof(con) ) == SOCKET_ERROR) { printf( "Failed to connect.\n" ); WSACleanup(); return; } }
void WComm::startServer(int port) { // Connect to a server связывание сокета с локальным адресом. con.sin_family = AF_INET;// con.sin_addr.s_addr = inet_addr( "0.0.0.0" ); con.sin_port = htons( port ); // вызываем bind для связывания if ( bind( m_socket, (SOCKADDR*) &con, sizeof(con) ) == SOCKET_ERROR) { printf( "Failed to connect.\n" ); WSACleanup(); return; }
// Listen on the socket. if ( listen( m_socket, 1 ) == SOCKET_ERROR ) printf( "Error listening on socket.\n");
}
void WComm::waitForClient() { AcceptSocket = INVALID_SOCKET; //разрешаем попытку входящего соединения на сервер while ( AcceptSocket == INVALID_SOCKET ) { AcceptSocket = accept( m_backup, NULL, NULL ); } m_socket = AcceptSocket; //m_socket-новый сокет }
int WComm::sendData(char *sendbuf) { return send( m_socket, sendbuf, strlen(sendbuf), 0 ); }
int WComm::recvData(char *recvbuf,int size) { int sz = recv( m_socket, recvbuf, size, 0 ); recvbuf[sz] = '\0'; return sz; }
void WComm::closeConnection() { closesocket(m_socket); m_socket = m_backup; }
void WComm::fileReceive(char *filename) {
char rec[50] = ""; HANDLE hFile; TCHAR szBuf[MAX_PATH]; string s1;
recv( m_socket, filename, 32, 0 ); send( m_socket, "OK", strlen("OK"), 0 );
hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,CREATE_ALWAYS, 0, NULL);
GetLastWriteTime( hFile, szBuf, MAX_PATH );
CloseHandle(hFile);
FILE *fw = fopen(filename, "wb");
int recs = recv( m_socket, rec, 32, 0 );//приняли размер файла send( m_socket, "OK", strlen("OK"), 0 );
rec[recs]='\0'; int size = atoi(rec);
while(size > 0) { char buffer[1030];
if(size>=1024) { recv( m_socket, buffer, 1024, 0 ); send( m_socket, "OK", strlen("OK"), 0 ); fwrite(buffer, 1024, 1, fw);
} else { recv( m_socket, buffer, size, 0 ); send( m_socket, "OK", strlen("OK"), 0 ); buffer[size]='\0'; fwrite(buffer, size, 1, fw); }
size -= 1024;
} char fn[MAX_PATH], fn1[MAX_PATH]; int i=0; //strcpy(s,szBuf); strcpy(fn, filename); string s_tmp; for(int i=strlen(filename)-1;fn[i+1]!='.';i--) { s_tmp=fn[i]; s1.insert(0,s_tmp);
} s1.resize(s1.length()); string s2; for(int i=0;i<MAX_PATH;i++) { s_tmp=szBuf[i]; s2.push_back(szBuf[i]); } s2.resize(strlen(szBuf)); string s3; s3=s2+s1;
fclose(fw); rename(fn, s3.c_str()); }
void WComm::fileSend(char *fpath) {
// Extract only filename from given path. char filename[50]; int i=strlen(fpath); for(;i>0;i--)if(fpath[i-1]=='\\')break; for(int j=0;i<=(int)strlen(fpath);i++)filename[j++]=fpath[i]; ////////////////////////////////////////
ifstream myFile (fpath, ios::in|ios::binary|ios::ate); int size = (int)myFile.tellg();//текущая позиция в потоке myFile.close();
char filesize[10];itoa(size,filesize,10);
send( m_socket, filename, strlen(filename), 0 );//отправляем имя char rec[32] = "";recv( m_socket, rec, 32, 0 );
send( m_socket, filesize, strlen(filesize), 0 );//отправляем размер файла recv( m_socket, rec, 32, 0 );//принимаем подтверждение
FILE *fr = fopen(fpath, "rb");
while(size > 0) { char buffer[1030];
if(size>=1024) { fread(buffer, 1024, 1, fr); send( m_socket, buffer, 1024, 0 ); recv( m_socket, rec, 32, 0 );
} else { fread(buffer, size, 1, fr); buffer[size]='\0'; send( m_socket, buffer, size, 0 ); recv( m_socket, rec, 32, 0 ); }
size -= 1024;
}
fclose(fr);
}
BOOL GetLastWriteTime(HANDLE hFile, LPTSTR lpszString, DWORD dwSize) { FILETIME ftCreate, ftAccess, ftWrite; SYSTEMTIME stUTC, stLocal; DWORD dwRet;
// Retrieve the file times for the file. if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite)) return FALSE;
// Convert the last-write time to local time. FileTimeToSystemTime(&ftWrite, &stUTC); SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
// Build a string showing the date and time. dwRet = StringCchPrintf(lpszString, dwSize, TEXT("%02d-%02d-%02d-%02d-%02d-%02d"), stLocal.wDay,stLocal.wMonth,stLocal.wYear, stLocal.wHour, stLocal.wMinute, stLocal.wSecond);
if( S_OK == dwRet ) return TRUE; else return FALSE; }
|
main.cpp Код | #include"wcomm.h" #include <string> #include "winsock2.h" #include <clocale> #define QUIT 9 #define IP "127.0.0.1" using namespace std; void runclient(char *ip); void runserver();
WComm w;
#include <gdiplus.h>
#pragma comment(lib, "GdiPlus.lib") /* наш многострадальный lib-файл */ using namespace Gdiplus; /* как хочешь, но мне не в кайф постоянно писать Gdiplus:: */ //7bdc1c72-01bb-4802-9998-6a5cb402006b static const GUID bmp= //{0x7bdc1c72, 0x01bb, 0x4802, {0x99,0x98,0x6a,0x5c,0xb4,0x02,0x00,0x6b}}; { 0x557cf406, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e } };
void runclient(char *ip); void runserver(); char SCREENPATH[50]= "c:\\screen\\screen.bmp"; #define SCREENPATHL L"c:\\screen\\screen.bmp"
void createscreen () {
GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
HDC scrdc, memdc; HBITMAP membit; scrdc = GetDC(0); int Height, Width; Height = GetSystemMetrics(SM_CYSCREEN); Width = GetSystemMetrics(SM_CXSCREEN); memdc = CreateCompatibleDC(scrdc); membit = CreateCompatibleBitmap(scrdc, Width, Height); SelectObject(memdc, membit); BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY); HBITMAP hBitmap; hBitmap =(HBITMAP) SelectObject(memdc, membit); Gdiplus::Bitmap bitmap(hBitmap, NULL); bitmap.Save(SCREENPATHL, &bmp);
DeleteObject(hBitmap);
}
void main(/*int argc, char *argv[]*/) { setlocale(LC_ALL, "rus"); int t, quit, i; char s[1024],s1[1024]; cout<<"type:\n1-run server\n2-run client"<<endl; cin >> t; strcpy(s,IP); if(t==1) runserver(); else { runclient(s); } }
void runserver() { // Start Server Daemon w.startServer(27015); printf("Server Started........\n");
while (TRUE) {
// Wait until a client connects w.waitForClient(); printf("Client Connected......\n");
// Work with client while(TRUE) { char rec[50] = "";//принимаем данные от клиента w.recvData(rec,32);w.sendData("OK");//отправляем, что приняли
if(strcmp(rec,"FileSend")==0) { char fname[32] =""; w.fileReceive(fname);//принимаем имя файла printf("File Received.........\n"); }
if(strcmp(rec,"EndConnection")==0) { printf("Connection Ended......\n"); break; } }
// Disconnect client w.closeConnection(); }
}
void runclient(char *ip) { char rec[32] = "";
// Connect To Server w.connectServer(ip,27015); printf("Connected to server...\n");
// Sending File int end; char fpath[1024]; int k=0, t=0; cout<<"Введите количество передаваемых скриншотов: > "; cin>>k; cout<<"Введите интервал создания скриншотов в секундах: > "; cin>>t; do { createscreen(); w.sendData("FileSend"); w.recvData(rec,32); w.fileSend(SCREENPATH); printf("File Sent.............\n"); //cout<<"you want to end send of files type 9 and else other symbol "<<endl; k--; Sleep(t*1000); //cin>>end; }while(k>0);
// Send Close Connection Signal w.sendData("EndConnection");w.recvData(rec,32); printf("Connection ended......\n"); }
|
но в проекте ещё непоятные папки WS Lib App Using WS Lib
|