📄 tcpsrvview.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 + -