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

📄 mysocket.cpp

📁 Mpeg client传输客户端
💻 CPP
字号:
// MySocket.cpp: implementation of the CMySocket class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MpegImage.h"
#include "MySocket.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define BUFSIZE 1024
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMySocket::CMySocket()
{

}


CMySocket::~CMySocket()
{	
	CMySocket::UnInit();
}


bool CMySocket::Init()
{
	if(!AfxSocketInit())
			return false;

	m_Socket = socket(AF_INET, SOCK_STREAM, 0);
	if(m_Socket == INVALID_SOCKET)
			return false;

	if(InitConfig() == false)
		return false;

	if(ConnectServer(m_strServerIP, m_iServerPort) == false)
		return false;
	
	return true;
}


void CMySocket::UnInit()
{
	closesocket(m_Socket);
}


bool CMySocket::ConnectServer(CString strServerIP, int iServerPort)
{
	LPCTSTR	lpszAddrSock;
	lpszAddrSock = (LPCTSTR)strServerIP;
	unsigned long longAddrSocket = inet_addr(lpszAddrSock);
	m_AddrSocket.sin_family = AF_INET;
	m_AddrSocket.sin_port = htons(iServerPort);
	memcpy(&m_AddrSocket.sin_addr, &longAddrSocket, 
		sizeof(longAddrSocket));
	if(connect(m_Socket, (LPSOCKADDR)&m_AddrSocket, sizeof(m_AddrSocket)) 
		== SOCKET_ERROR)
			return false;

	return true;
}


bool CMySocket::SendFile(CString strFilePath)
{
	CFile sendfile;
	if(!(sendfile.Open(strFilePath, CFile::modeRead | CFile::typeBinary)))
		return false;

	if(CMySocket::SendFileInfo(sendfile) == false)
		return false;

	if(CMySocket::SendFileBuf(sendfile) == false)
		return false;
	
	sendfile.Close();

	return true;
}


bool CMySocket::SendFileInfo(const CFile& sendfile)
{
	FILEINFO sendfileinfo;
	sendfileinfo.iFileLength = sendfile.GetLength();
	int error;
	error = send(m_Socket, (char *)&sendfileinfo, sizeof(sendfileinfo), 0);
	if((error == SOCKET_ERROR) || (error == 0))
		return false;	

	return true;
}


bool CMySocket::SendFileBuf(CFile& sendfile)
{
	char* chBuf = new char[BUFSIZE];
	int iTempNum = 0;	
	int iTotalNum = 0;
	int iFileLength= sendfile.GetLength();
	int iError = 0;
	
	while(1)
		{
			iTempNum = sendfile.Read(chBuf, BUFSIZE);
			if(iTempNum == 0)break;
			iError = send(m_Socket, chBuf, iTempNum, 0);
			if((iError == SOCKET_ERROR) || (iError == 0))
				{
					delete []chBuf;
					return false;
				}
			iTotalNum += iTempNum;
			if(iTotalNum >= iFileLength)
				break;
		}
	
	delete []chBuf;
	return true;
}


CString CMySocket::ReadTxt(CString strFileName)
{
	CStdioFile csfTxtFile;
	CString    strFileString = "";
	if(csfTxtFile.Open(strFileName, CFile::modeRead))
	{
		csfTxtFile.ReadString(strFileString);
		csfTxtFile.Close();
	}
	return strFileString;
}


CString CMySocket::GetCurrentPath()
{
	TCHAR tchCurrentPath[MAX_PATH] = {0};
	GetModuleFileName(NULL, tchCurrentPath, MAX_PATH);

	CString strCurrentPath = "";
	strCurrentPath.Format("%s", tchCurrentPath);
	return strCurrentPath;
}


bool CMySocket::InitConfig()
{
	CString strCurrentPath = CMySocket::GetCurrentPath();
	if(strCurrentPath == "")
		return false;

	strCurrentPath += "Server.txt";
	CString strFileString = CMySocket::ReadTxt(strCurrentPath);
	if(strFileString == "")
		return false;

	CString strTemp = "";
	int iStringPos = strFileString.Find('*');
	strTemp = strFileString.Left(iStringPos);
	m_iServerPort = atoi(strTemp.GetBuffer(0));
	strTemp.ReleaseBuffer();
	
	int iStringLength = strFileString.GetLength();
	strFileString = strFileString.Right(iStringLength - (iStringPos + 1));
	iStringPos = strFileString.Find('*');
	strTemp = strFileString.Left(iStringPos);
	m_strServerIP = strTemp;
	return true;
}

⌨️ 快捷键说明

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