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

📄 tcpsrvview.cpp

📁 nucleus source 源码 全部源码
💻 CPP
字号:
// TcpsrvView.cpp : implementation file
//contains TCP client thread for WinSock

#include "stdafx.h"
#include "WinDemo.h"
#include "TcpsrvView.h"
#include "TcpsrvDoc.h"
#include "LoopByte.h"

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

static HWND m_hWindow2;
static int nTSBytes, nTSPck, stop_client;
#define defaultloop 5
#define defaultport 7

HANDLE hStartEvent2 = NULL;
CLoopByte dlg1;

UINT TcpcliThread(LPVOID pParam)

{
	
	WSADATA stWSAData;               /*WinSock return information */
	SOCKET s;                        /* socket handle            */
	struct sockaddr_in stRmtAddr1;    /* structure for remote socket */
	
	char OutBuf [1000];
	char InBuf [1000];   /* buffer for incoming data */
	
	int cRet;                        /* connection   return error value */
	int sRet;                        /* startup      return error value */
	int rRet;                        /* socket return value              */
	int clRet;                       /* close return value              */
	int snRet;                       /* send return value               */
	
	long loop;                        /* variable for looping             */
	long loopmax = 0;                     /* maximum for looping              */
	int buflength = 0;
	int port = 7;

	nTSBytes = 0;
	nTSPck = 0;
    stop_client = 0;
	
	buflength = dlg1.m_eBytes;
	loopmax = dlg1.m_eLoops;

	sRet = WSAStartup(0x0101, &stWSAData);  /*register for WinSock */
	
	if (sRet != 0)                         
		TRACE("Winsock startup error- WinSock may not be loaded!\n");
	else
		TRACE("Winsock started\n");
	
	s = socket(PF_INET, SOCK_STREAM, 0);    /*get a stream or tcp socket */
	
	if (s == INVALID_SOCKET)               
		TRACE("Unable to get socket - Error %d\n", WSAGetLastError());
	else
		TRACE("Socket registered\n");      
	
	stRmtAddr1.sin_family               =PF_INET;     /*internet family */
	stRmtAddr1.sin_port = htons(port);
	stRmtAddr1.sin_addr.s_addr = stRmtAddr.sin_addr.s_addr;

	TRACE("Sending to %s ", inet_ntoa(stRmtAddr1.sin_addr));
	TRACE("on Port # %ld ", ntohs(stRmtAddr1.sin_port));
	TRACE("for %d loops\n", loopmax);
	
	cRet = connect(s,                              /*connect to server */
		(struct sockaddr *)&stRmtAddr1,
		sizeof(struct sockaddr));
	
	if (cRet == SOCKET_ERROR)           
		TRACE("Unable to connect socket- error %d\n", WSAGetLastError());
	
	memset(OutBuf, '*', buflength);

	loop=0; 
	while (((loop < loopmax) || (loopmax == 0))
            && (!stop_client) ) /*beginning of loop */
	{
		
		snRet = send(s,                       /*send the string */
			(LPSTR)&OutBuf,          /*string to send  */
			buflength,                 /*number of bytes to send  */
			0);                        
		
		if (snRet == SOCKET_ERROR)
        {
			TRACE("Unable to send error = %d\n", WSAGetLastError());
            break;
        }
		

        rRet = recv(s,                  /*receive the string back */
			(LPSTR)&InBuf,
			buflength,
			0);
    
        if (rRet == SOCKET_ERROR)
        {
		    TRACE("Unable to receive, error = %d\n", WSAGetLastError());
            break;
        }

        nTSBytes += rRet;
		nTSPck++;
        DWORD dwResult;
		::SendMessageTimeout(m_hWindow2, WM_UPDATE_PROGSRV, 0, 0, SMTO_BLOCK, 250, &dwResult);		
		if (loopmax != 0)
			loop++;
	}           /*end of loop */
	
	
	
	shutdown(s,2);                 /*shutdown has possible values 0,1,2 */
	
	
	clRet = closesocket(s);               /*close the socket  */
	
	
	if (clRet != 0)                       
		TRACE("Problem closing socket! Error- %d", WSAGetLastError());
	
	
	
	WSACleanup();                            /*De-Register WinSock */

	SetEvent(hStartEvent2);

	return(0);
	
	
 }                                         /*End of Program */


/////////////////////////////////////////////////////////////////////////////
// CTcpsrvView

IMPLEMENT_DYNCREATE(CTcpsrvView, CFormView)

CTcpsrvView::CTcpsrvView()
	: CFormView(CTcpsrvView::IDD)
{
	//{{AFX_DATA_INIT(CTcpsrvView)
	m_tcpsrvByte = 0;
	m_tcpsrvPck = 0;
	//}}AFX_DATA_INIT
}

CTcpsrvView::~CTcpsrvView()
{
}

void CTcpsrvView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTcpsrvView)
	DDX_Text(pDX, IDC_TCP_SRV_BYTE, m_tcpsrvByte);
	DDV_MinMaxInt(pDX, m_tcpsrvByte, 0, 2147483647);
	DDX_Text(pDX, IDC_TCP_SRV_PCK, m_tcpsrvPck);
	DDV_MinMaxInt(pDX, m_tcpsrvPck, 0, 2147483647);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTcpsrvView, CFormView)
	//{{AFX_MSG_MAP(CTcpsrvView)
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_UPDATE_PROGSRV, OnUpdateProgress2)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTcpsrvView diagnostics

#ifdef _DEBUG
void CTcpsrvView::AssertValid() const
{
	CFormView::AssertValid();
}

void CTcpsrvView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTcpsrvView message handlers


LRESULT CTcpsrvView::OnUpdateProgress2(WPARAM wParam, LPARAM lParam)
{
    m_tcpsrvByte = nTSBytes;
	m_tcpsrvPck = nTSPck;
	UpdateData(FALSE); //calls DDX
	return 0;
}

void CTcpsrvView::OnClose() 
{	
	CFormView::OnClose();	
}

void CTcpsrvView::OnDestroy() 
{
	CFormView::OnDestroy();

    /* Set the flag to end the client thread. */
    stop_client = 1;
	
	WaitForSingleObject(hStartEvent2, INFINITE);
	CloseHandle(hStartEvent2);
	
	
}

int CTcpsrvView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	dlg1.DoModal();	
	m_hWindow2 = GetSafeHwnd();
	CWinThread* pThread2 = AfxBeginThread(TcpcliThread, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
	hStartEvent2 = ::CreateEvent(NULL, FALSE, FALSE, NULL);
	
	return 0;
}

⌨️ 快捷键说明

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