📄 udpcliview.cpp
字号:
// UdpcliView.cpp : implementation file
//contains UDP Server thread on WinSock
#include "stdafx.h"
#include "WinDemo.h"
#include "UdpcliView.h"
#include "LoopByte.h"
#define BufSize 1472
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
SOCKET udps;
static HWND m_hWindow4;
static int nUCBytes, nUCPck;
BOOL g_bCloseThread = FALSE; // Signal the thread to terminat (TRUE)
HANDLE hStartEvent4 = NULL;
CLoopByte dlg3;
UINT UdpConnectClient(LPVOID pParam)
{
char InBuf [BufSize]; /*input buffer */
int rRet; /* receive returen error value*/
int snRet; /* send return error value */
int n; /* Select value */
struct sockaddr rmtaddr; /*remote addr structure */
int structlen=sizeof(rmtaddr); /*length of structure for calls */
int nBytesToXfer; /*bytes to transfer for send function*/
FD_SET readfd;
struct timeval timeout1;
timeout1.tv_sec = 3;
timeout1.tv_usec = 0;
unsigned long x = htonl(2);
theApp.SendBytes((char *)&x, sizeof(unsigned long));
unsigned long x1 = htonl(dlg3.m_eBytes);
theApp.SendBytes((char *)&x1, sizeof(unsigned long));
unsigned long x2 = htonl(dlg3.m_eLoops);
theApp.SendBytes((char *)&x2, sizeof(unsigned long));
while(!g_bCloseThread)
{
memset(InBuf, 0, BufSize);
FD_ZERO(&readfd);
FD_SET(udps, &readfd);
n = select(udps, &readfd, 0, 0, &timeout1);
if (n != SOCKET_ERROR && n != 0)
{
rRet = recvfrom(udps, /*the recfrom() stores the sockaddr */
(LPSTR)&InBuf, /*needed for the sendto() */
BufSize, /*size of buffer */
0, /*flags */
(struct sockaddr FAR *)&rmtaddr, /*structure to put */
&structlen); /*info into */
}
else
{
TRACE("Unable to recvfrom- erro number %d\n", WSAGetLastError());
break;
}
if ((rRet == 1) && (strcmp(InBuf, "q") == 0))
break;
nBytesToXfer = rRet; /*need length of InBuf*/
snRet = sendto(udps, /*sends the string back */
(LPSTR)&InBuf,
nBytesToXfer, /* how many bytes to send */
0, /* flags */
(struct sockaddr FAR *)&rmtaddr, /* structure stuff */
sizeof(rmtaddr));
if (snRet == SOCKET_ERROR)
{
TRACE("Unable to sendto- erro number %d\n", WSAGetLastError());
break;
}
if (rRet != 0) //update data on the window
{
nUCBytes += rRet;
nUCPck++;
DWORD dwResult;
::SendMessageTimeout(m_hWindow4, WM_UPDATE_UPROG4, 0, 0, SMTO_BLOCK, 250, &dwResult);
}
} /*looping for right now */
SetEvent(hStartEvent4);
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CUdpcliView
IMPLEMENT_DYNCREATE(CUdpcliView, CFormView)
CUdpcliView::CUdpcliView()
: CFormView(CUdpcliView::IDD)
{
//{{AFX_DATA_INIT(CUdpcliView)
m_udpcliByte = 0;
m_udpcliPck = 0;
//}}AFX_DATA_INIT
g_bCloseThread = FALSE;
}
CUdpcliView::~CUdpcliView()
{
}
void CUdpcliView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUdpcliView)
DDX_Text(pDX, IDC_UDP_CLI_BYTE, m_udpcliByte);
DDV_MinMaxInt(pDX, m_udpcliByte, 0, 2147483647);
DDX_Text(pDX, IDC_UDP_CLI_PCK, m_udpcliPck);
DDV_MinMaxInt(pDX, m_udpcliPck, 0, 2147483647);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CUdpcliView, CFormView)
//{{AFX_MSG_MAP(CUdpcliView)
ON_WM_CLOSE()
ON_WM_CREATE()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_UPDATE_UPROG4, OnUpdateProgress4)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUdpcliView diagnostics
#ifdef _DEBUG
void CUdpcliView::AssertValid() const
{
CFormView::AssertValid();
}
void CUdpcliView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CUdpcliView message handlers
void CUdpcliView::OnClose()
{
CFormView::OnClose();
}
int CUdpcliView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
nUCBytes = 0;
nUCPck = 0;
dlg3.DoModal();
m_hWindow4 = GetSafeHwnd();
CWinThread* pThread4 = AfxBeginThread(UdpConnectClient,
THREAD_PRIORITY_NORMAL, 0, 0, NULL);
hStartEvent4 = ::CreateEvent(NULL, FALSE, FALSE, NULL);
return 0;
}
void CUdpcliView::OnDestroy()
{
g_bCloseThread = TRUE;
CFormView::OnDestroy();
WaitForSingleObject(hStartEvent4, INFINITE);
CloseHandle(hStartEvent4);
unsigned long x = htonl(4);
theApp.SendBytes((char *)&x, sizeof(unsigned long));
}
LRESULT CUdpcliView::OnUpdateProgress4(WPARAM wParam, LPARAM lParam)
{
m_udpcliByte = nUCBytes;
m_udpcliPck = nUCPck;
UpdateData(FALSE); //calls DDX
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -