⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infrared.cpp

📁 红外线文件传输 这是我“任何地点办公”理念所想到的
💻 CPP
字号:
#include <windows.h>
#include <af_irda.h>
#include <windowsx.h>
#include <winsock.h> 
#include <aygshell.h>
#include "Infrared.h"
#include "ErrorReporting.h"
#include "File.h"

#pragma comment(lib, "Ws2.lib")

#define NUMRETRY  5                   // Maximum number of retries

ErrorReport term1;


bool SocketServer(LPTSTR _filename){
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(2,2);

	err = WSAStartup(wVersionRequested,&wsaData);
	if(err !=0){
	   MessageBox(NULL,L"not find a usable WinSock DLL.", L"wVersionRequested:",MB_OK);
	   return false;
	}

	if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2){
		WSACleanup();
		return false;
	}
	SOCKET ServerSock,
		ClientSock;

	SOCKADDR_IRDA address = {AF_IRDA,0,0,0,0,"IRServer"};

	int index = 0,
		iReturn;

	CHAR szServerA[100];
	TCHAR szServerW[100];

	if((ServerSock = socket(AF_IRDA,SOCK_STREAM,0))==INVALID_SOCKET){
		term1.Report();
		return false;
	}

	if(bind(ServerSock,(struct sockaddr *)&address, sizeof(address))==SOCKET_ERROR){
		term1.Report();
		return false;
	}

	if(listen(ServerSock,5)==SOCKET_ERROR){
		term1.Report();
		return false;
	}

	if((ClientSock = accept(ServerSock,0,0))==INVALID_SOCKET){
		term1.Report();
		return false;
	}

//	if(send(ClientSock,"To Client!",strlen("To Client!")+1,0)==SOCKET_ERROR){
//		term1.Report();
//	}

	File filetoSend;

	filetoSend.FileCreate(_filename);
	filetoSend.FileRead();
	

	if(send(ClientSock,(const char *)((PBYTE)filetoSend.BuffFileRead),
		strlen((const char *)((PBYTE)filetoSend.BuffFileRead))+1,0)==SOCKET_ERROR){//"To Client!"
		term1.Report();
	}


	iReturn = recv(ClientSock,szServerA,sizeof(szServerA),0);

	if(iReturn = SOCKET_ERROR){
		term1.Report();
		return false;
	}else if(iReturn == 0){
	   MessageBox(NULL, L"Finished receiving data from client!", L"Finished receiving",MB_OK);
	}else{
		for(index = 0;index<=sizeof(szServerA);index++)
			szServerW[index] = szServerA[index];
	   MessageBox(NULL, szServerW, L"Data:",MB_OK);
	}
	closesocket(ServerSock);
	closesocket(ClientSock);

	return  true;
}


bool SocketClient(){
	SOCKET sock;
	DEVICELIST devList;

	SOCKADDR_IRDA address = {AF_IRDA,0,0,0,0,"IRServer"};

	int iCount = 0,
		index = 0,
		iReturn,
		iDevListLen = sizeof(devList);

	char szClientA[100];
	TCHAR szClientW[100];
	
	if((sock = socket(AF_IRDA,SOCK_STREAM,0))==INVALID_SOCKET){
		term1.Report();
		return false;
	}

	devList.numDevice = 0;

	while((devList.numDevice == 0)&&(iCount<=NUMRETRY)){

		if(getsockopt(sock,SOL_IRLMP,IRLMP_ENUMDEVICES,
			(char *)&devList,&iDevListLen)==SOCKET_ERROR){

			term1.Report();
			return FALSE;
		}
		
		iCount++;
		Sleep(1000);
	}

	if(iCount>NUMRETRY){
		MessageBox(NULL,L"Server could not be located!",L"Error:",MB_OK);
		closesocket(sock);
		return false;
	}

	if(connect(sock,(struct sockaddr *)&address,sizeof(SOCKADDR_IRDA))==SOCKET_ERROR){
		term1.Report();
		closesocket(sock);
		return false;
	}
	
	if (send(sock,"Received.",strlen ("Received.")+1,0)== SOCKET_ERROR){
		term1.Report();
		return false;
	}
	
	iReturn = recv(sock,szClientA,sizeof(szClientA),0);

	if(iReturn == SOCKET_ERROR){
		term1.Report();
		return false;
	}else if(iReturn == 0){ 
		MessageBox(NULL,TEXT("Finished receiving data!"),TEXT("Client"),MB_OK);
	}else{//If no error occurs, recv returns the number of bytes received.
		for(index = 0;index<=sizeof(szClientA);index++){
			szClientW[index]=szClientA[index];
		}
			MessageBox(NULL,szClientW,TEXT("data from Server:"),MB_OK);			
	}
   		closesocket(sock);
		return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -