一、TCP介绍

先放这里有时间在写,最近在写DuiLib相关的使用内容,这部分大家凑活着看

二、程序截图

下载链接

链接:https://pan.baidu.com/s/1MzNUzwd7WwBat6vNMcu6Ow 密码:ibuv

主要源码:

//.h


// TCPClient.cpp : 定义应用程序的类行为。
//#include "stdafx.h"
#include "TCPClient.h"
#include "TCPClientDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// CTCPClientAppBEGIN_MESSAGE_MAP(CTCPClientApp, CWinApp)ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()// CTCPClientApp 构造CTCPClientApp::CTCPClientApp()
{// 支持重新启动管理器m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;// TODO: 在此处添加构造代码,// 将所有重要的初始化放置在 InitInstance 中
}// 唯一的一个 CTCPClientApp 对象CTCPClientApp theApp;// CTCPClientApp 初始化BOOL CTCPClientApp::InitInstance()
{// 如果一个运行在 Windows XP 上的应用程序清单指定要// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,//则需要 InitCommonControlsEx()。否则,将无法创建窗口。INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将它设置为包括所有要在应用程序中使用的// 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp::InitInstance();AfxEnableControlContainer();// 创建 shell 管理器,以防对话框包含// 任何 shell 树视图控件或 shell 列表视图控件。CShellManager *pShellManager = new CShellManager;// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO: 应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey(_T("应用程序向导生成的本地应用程序"));CTCPClientDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: 在此放置处理何时用//  “确定”来关闭对话框的代码}else if (nResponse == IDCANCEL){// TODO: 在此放置处理何时用//  “取消”来关闭对话框的代码}// 删除上面创建的 shell 管理器。if (pShellManager != NULL){delete pShellManager;}// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,//  而不是启动应用程序的消息泵。return FALSE;
}

//.cpp


// TCPClientDlg.cpp : 实现文件
//#include "stdafx.h"
#include "TCPClient.h"
#include "TCPClientDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define TIMEID 1
CTCPClientDlg* CTCPClientDlg::m_TCPClient;// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()// CTCPClientDlg 对话框CTCPClientDlg::CTCPClientDlg(CWnd* pParent /*=NULL*/): CDialogEx(CTCPClientDlg::IDD, pParent), m_DestIP(0), m_DestPort(0), m_strContent(_T("")), m_Status(_T("")), m_Detail(_T(""))
{m_TCPClient = this;m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CTCPClientDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_IPAddress(pDX, IDC_IPADDRESS1, m_DestIP);DDX_Text(pDX, IDC_EDIT_PORT, m_DestPort);DDX_Text(pDX, IDC_EDIT_CONTENT, m_strContent);DDX_Control(pDX, IDC_STATIC_BCONNECT, m_Tip);DDX_Text(pDX, IDC_STATIC_BCONNECT, m_Status);DDX_Text(pDX, IDC_EDIT_RESULT, m_Detail);DDX_Control(pDX, IDC_EDIT_RESULT, m_EditResult);DDX_Control(pDX, IDC_EDIT_FAIL, m_EditFail);DDX_Control(pDX, IDC_COMBO1, m_ComboBox);
}BEGIN_MESSAGE_MAP(CTCPClientDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_CON_SEND, &CTCPClientDlg::OnBnClickedButtonConSend)ON_BN_CLICKED(IDC_BUTTON_SEND, &CTCPClientDlg::OnBnClickedButtonSend)ON_BN_CLICKED(IDC_BUTTON_STOP, &CTCPClientDlg::OnBnClickedButtonStop)ON_BN_CLICKED(IDC_BUTTON_RECONNECT, &CTCPClientDlg::OnBnClickedButtonReconnect)
END_MESSAGE_MAP()// CTCPClientDlg 消息处理程序BOOL CTCPClientDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);         // 设置大图标SetIcon(m_hIcon, FALSE);        // 设置小图标// TODO: 在此添加额外的初始化代码m_ComboBox.SetCurSel(0);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}void CTCPClientDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CTCPClientDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CTCPClientDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CTCPClientDlg::OnBnClickedButtonConSend()
{// TODO: 在此添加控件通知处理程序代码// TODO: 在此添加控件通知处理程序代码CString strCBText;m_EditResult.SetWindowTextA("");m_EditFail.SetWindowTextA("");UpdateData(TRUE);unsigned char *pIP;CString strIP;//IPCString strPort;//端口号//CString strTimes;//发送次数CString strContent;//发送内容CString strStatus;CString strErr;//显示时间的变量int iHour;int iMinute;int iSecond;pIP = (unsigned   char*)&m_DestIP;strIP.Format("%u.%u.%u.%u", *(pIP + 3), *(pIP + 2), *(pIP + 1), *pIP);strPort.Format("%u", m_DestPort);//strTimes.Format("%u", m_SendTimes);strContent.Format("%s", m_strContent);strStatus.Format("%s", "连接状态:未连接");WSADATA wsaData;char buff[1024];memset(buff, 0, sizeof(buff));if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){MessageBox("状态:加载Winsock失败", "提示", 0);GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();return;}SOCKADDR_IN addrSrv;addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(atoi(strPort));addrSrv.sin_addr.S_un.S_addr = inet_addr(strIP.GetBuffer());//创建套接字  m_SocketClient = socket(AF_INET, SOCK_STREAM, 0);if (SOCKET_ERROR == m_SocketClient){strErr.Format("状态:Socket创建失败:%d", WSAGetLastError());GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();//MessageBox(strErr, "提示", 0);return;}//向服务器发出连接请求  if (connect(m_SocketClient, (struct  sockaddr*)&addrSrv, sizeof(addrSrv)) == INVALID_SOCKET) {//printf(”Connect failed : %d”, WSAGetLastError());strErr.Format("状态:连接失败:%d", WSAGetLastError());GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();//MessageBox(strErr, "提示", 0);return;}else{strErr.Format("状态:已连接");GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);}//获得ComboBox内容int nIndex = m_ComboBox.GetCurSel();m_ComboBox.GetLBText(nIndex, strCBText);//设置定时器int iTimes = atoi(strCBText.GetString());UINT uElapse = 1000 / iTimes;//开始定时发送数据  SetTimer(TIMEID, uElapse, TimerProc);CWnd* cwndBtStop =  GetDlgItem(IDC_BUTTON_STOP);cwndBtStop->EnableWindow(TRUE);CWnd* cwndBtContinue = GetDlgItem(IDC_BUTTON_CON_SEND);cwndBtContinue->EnableWindow(FALSE);return;
}void CTCPClientDlg::OnBnClickedButtonSend()
{// TODO: 在此添加控件通知处理程序代码m_EditResult.SetWindowTextA("");m_EditFail.SetWindowTextA("");SendTcpMessage();
}void CTCPClientDlg::OnBnClickedButtonStop()
{// TODO: 在此添加控件通知处理程序代码// TODO: 在此添加控件通知处理程序代码if (FALSE == KillTimer(TIMEID)){MessageBox("停止失败", "提示", 0);}CWnd* cwndBtStop = GetDlgItem(IDC_BUTTON_STOP);cwndBtStop->EnableWindow(FALSE);CWnd* cwndBtContinue = GetDlgItem(IDC_BUTTON_CON_SEND);cwndBtContinue->EnableWindow(TRUE);closesocket(m_SocketClient);WSACleanup();
}void CTCPClientDlg::OnBnClickedButtonReconnect()
{// TODO: 在此添加控件通知处理程序代码// TODO: 在此添加控件通知处理程序代码// TODO: 在此添加控件通知处理程序代码CString strCBText;UpdateData(TRUE);unsigned char *pIP;CString strIP;//IPCString strPort;//端口号//CString strTimes;//发送次数CString strContent;//发送内容CString strStatus;CString strErr;//显示时间的变量int iHour;int iMinute;int iSecond;pIP = (unsigned   char*)&m_DestIP;strIP.Format("%u.%u.%u.%u", *(pIP + 3), *(pIP + 2), *(pIP + 1), *pIP);strPort.Format("%u", m_DestPort);//strTimes.Format("%u", m_SendTimes);strContent.Format("%s", m_strContent);strStatus.Format("%s", "连接状态:未连接");WSADATA wsaData;char buff[1024];memset(buff, 0, sizeof(buff));if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){MessageBox("状态:加载Winsock失败", "提示", 0);GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();return;}SOCKADDR_IN addrSrv;addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(atoi(strPort));addrSrv.sin_addr.S_un.S_addr = inet_addr(strIP.GetBuffer());//创建套接字  m_SocketClient = socket(AF_INET, SOCK_STREAM, 0);if (SOCKET_ERROR == m_SocketClient){strErr.Format("状态:Socket创建失败:%d", WSAGetLastError());GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();//MessageBox(strErr, "提示", 0);return;}//向服务器发出连接请求  if (connect(m_SocketClient, (struct  sockaddr*)&addrSrv, sizeof(addrSrv)) == INVALID_SOCKET) {//printf(”Connect failed : %d”, WSAGetLastError());strErr.Format("状态:连接失败:%d", WSAGetLastError());GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();//MessageBox(strErr, "提示", 0);return;}else{strErr.Format("状态:已连接");GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);}//获得ComboBox内容int nIndex = m_ComboBox.GetCurSel();m_ComboBox.GetLBText(nIndex, strCBText);//设置定时器int iTimes = atoi(strCBText.GetString());UINT uElapse = 1000 / iTimes;//开始定时发送数据  SetTimer(TIMEID, uElapse, TimerProc);CWnd* cwndBtStop = GetDlgItem(IDC_BUTTON_STOP);cwndBtStop->EnableWindow(TRUE);CWnd* cwndBtContinue = GetDlgItem(IDC_BUTTON_CON_SEND);cwndBtContinue->EnableWindow(FALSE);CWnd* cwndBtReContinue = m_TCPClient->GetDlgItem(IDC_BUTTON_RECONNECT);cwndBtReContinue->EnableWindow(FALSE);return;
}
void CTCPClientDlg::SendTcpMessage()
{UpdateData(TRUE);unsigned char *pIP;CString strIP;//IPCString strPort;//端口号//CString strTimes;//发送次数CString strContent;//发送内容CString strStatus;CString strErr;//显示时间的变量int iHour;int iMinute;int iSecond;pIP = (unsigned   char*)&m_DestIP;strIP.Format("%u.%u.%u.%u", *(pIP + 3), *(pIP + 2), *(pIP + 1), *pIP);strPort.Format("%u", m_DestPort);//strTimes.Format("%u", m_SendTimes);strContent.Format("%s", m_strContent);strStatus.Format("%s", "连接状态:未连接");WSADATA wsaData;char buff[1024];memset(buff, 0, sizeof(buff));if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){MessageBox("状态:加载Winsock失败", "提示", 0);GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();return;}SOCKADDR_IN addrSrv;addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(atoi(strPort));addrSrv.sin_addr.S_un.S_addr = inet_addr(strIP.GetBuffer());//创建套接字  SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);if (SOCKET_ERROR == sockClient){strErr.Format("状态:Socket创建失败:%d", WSAGetLastError());GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();//MessageBox(strErr, "提示", 0);return;}//向服务器发出连接请求  if (connect(sockClient, (struct  sockaddr*)&addrSrv, sizeof(addrSrv)) == INVALID_SOCKET) {//printf(”Connect failed : %d”, WSAGetLastError());strErr.Format("状态:连接失败:%d", WSAGetLastError());GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);//获得系统时间显示发送内容CString strContinueTIP;CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strContinueTIP.Format("%d:%d:%d %s\r\n\r\n", iHour, iMinute, iSecond, strErr);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strContinueTIP);strContinueTIP.Empty();strErr.Empty();//MessageBox(strErr, "提示", 0);return;}else{strErr.Format("状态:已连接");GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);}//发送数据  CString strAdd; //将时间+内容追加到控件中  if (m_strContent.IsEmpty()){closesocket(sockClient);WSACleanup();return ;}if (SOCKET_ERROR == send(sockClient, m_strContent, m_strContent.GetLength(), 0)){strErr.Format("状态:发送失败:%d", WSAGetLastError());GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);closesocket(sockClient);WSACleanup();//获得系统时间显示发送内容CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strAdd.Format("%d:%d:%d  %s (发送失败)\r\n\r\n", iHour, iMinute, iSecond, m_strContent);m_EditResult.SetSel(-1);m_EditResult.ReplaceSel(strAdd);m_EditFail.SetSel(-1);m_EditFail.ReplaceSel(strAdd);return;}//获得系统时间显示发送内容CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strAdd.Format("%d:/%d:/%d  %s (发送成功) \r\n\r\n", iHour, iMinute, iSecond, m_strContent);m_EditResult.SetSel(-1);m_EditResult.ReplaceSel(strAdd);//关闭套接字  closesocket(sockClient);WSACleanup();return;
}void   CALLBACK  CTCPClientDlg::TimerProc(HWND   hWnd, UINT   nMsg, UINT_PTR   nTimerid, DWORD   dwTime)
{m_TCPClient->UpdateData(TRUE);CString strAdd; //将时间+内容追加到控件中  CString strErr;//显示时间的变量int iHour;int iMinute;int iSecond;if (m_TCPClient->m_strContent.IsEmpty()){return;}//发送时采用长连接if (SOCKET_ERROR == send(m_TCPClient->m_SocketClient, m_TCPClient->m_strContent, m_TCPClient->m_strContent.GetLength(), 0)){strErr.Format("状态:发送失败:%d", WSAGetLastError());m_TCPClient->GetDlgItem(IDC_STATIC_BCONNECT)->SetWindowText(strErr);closesocket(m_TCPClient->m_SocketClient);WSACleanup();//获得系统时间显示发送内容CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strAdd.Format("%d:%d:%d  %s (定时发送失败)\r\n\r\n", iHour, iMinute, iSecond, m_TCPClient->m_strContent);m_TCPClient->m_EditResult.SetSel(-1);m_TCPClient->m_EditResult.ReplaceSel(strAdd);m_TCPClient->m_EditFail.SetSel(-1);m_TCPClient->m_EditFail.ReplaceSel(strAdd);m_TCPClient->KillTimer(TIMEID);CWnd* cwndBtStop = m_TCPClient->GetDlgItem(IDC_BUTTON_STOP);cwndBtStop->EnableWindow(FALSE);CWnd* cwndBtContinue = m_TCPClient->GetDlgItem(IDC_BUTTON_CON_SEND);cwndBtContinue->EnableWindow(TRUE);CWnd* cwndBtReContinue = m_TCPClient->GetDlgItem(IDC_BUTTON_RECONNECT);cwndBtReContinue->EnableWindow(TRUE);return;}//获得系统时间显示发送内容CTime tm; tm = CTime::GetCurrentTime();iHour = tm.GetHour();iMinute = tm.GetMinute();iSecond = tm.GetSecond();strAdd.Format("%d:%d:%d  %s (定时发送成功) \r\n\r\n", iHour, iMinute, iSecond, m_TCPClient->m_strContent);m_TCPClient->m_EditResult.SetSel(-1);m_TCPClient->m_EditResult.ReplaceSel(strAdd);//关闭套接字
}

简单的TCP客户端发包工具相关推荐

  1. QT-通用TCP客户端使用工具

    QT-通用TCP客户端程序 前言 一.演示效果 二.关键程序 三.程序链接 前言 简单TCP客户端测试工具,满足基本通讯测试和应用. 一.演示效果 二.关键程序 代码如下: #include &quo ...

  2. java 客户端 tcp_一个简单的Tcp客户端

    一个简单的Tcp客户端 import java.io.InputStream; import java.net.InetAddress; import java.net.Socket; public ...

  3. 简单的TCP带宽测试工具TTCP

    源码可以从陈硕的github上下载到,位置在muduo-master\examples\ace\ttcp TTCP是一个传统的测试TCP性能的工具,它主要测试两个机器之间TCP的吞吐量,在应用层模拟消 ...

  4. java tcp发消息给硬件_java – TCP客户端/服务器通信只发送第一条消息?

    我在java中设置一个简单的TCP客户端服务器交互. 服务器: 服务器是用Java编写的桌面客户端: import java.io.BufferedReader; import java.io.Dat ...

  5. Modbus协议栈应用实例之三:Modbus TCP客户端应用

    自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例.所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,这一篇中我们将解说如何使用协议栈实现一个M ...

  6. LwIP应用开发笔记之六:LwIP无操作系统TCP客户端

    上一篇我们基于LwIP协议栈的RAW API实现了一个TCP服务器的简单应用,接下来一节我们来实现一个TCP客户端的简单应用. 1.TCP简述 TCP(Transmission Control Pro ...

  7. websocket 客户端测试工具

    一个简单的 websocket 客户端测试工具(html页面) 基于自定义的 websocket 协议,后端服务是一个基于Netty的websocket Server <!DOCTYPE htm ...

  8. Linux C语言实现TCP客户端与服务器

    本文中的TCP server 和 client,为基于软件层面(TCP/IP协议栈)的Socket应用开发. 一.Socket 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可 ...

  9. 笨办法学C 练习45:一个简单的TCP/IP客户端

    练习45:一个简单的TCP/IP客户端 原文:Exercise 45: A Simple TCP/IP Client 译者:飞龙 我打算使用RingBuffer来创建一个非常简单的小型网络测试工具,叫 ...

  10. c#  tcp客户端 针对火灾报警系统进行自测的工具

    c#  tcp客户端 针对火灾报警系统进行自测的工具 using System; using System.Collections.Generic; using System.IO; using Sy ...

最新文章

  1. python3 sys.stdin.readline input 区别
  2. signature=52ceb41d49ce2ed43689f29f1663e802,SINGLE SIGN ON WITH MULTIPLE AUTHENTICATION FACTORS
  3. boost::geometry::wkt用法的测试程序
  4. 关于FastStone Capture for Windows在Windows10英文系统下的中文乱码问题
  5. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
  6. CF98E Help Shrek and Donkey(纳什博弈 + 大讨论)
  7. CoreJava学习第五课 --- 进入第二阶段:面向对象编程思想
  8. MongoDB中关于64位整型存储解决方案
  9. 「CSDN 2020年度博客之星」总榜单在此揭晓
  10. 眼图matlab仿真_MATLAB开发自动驾驶第二十课-自动驾驶场景设计器中的预建驾驶场景...
  11. 人工智能学习——模糊控制
  12. PLSQL和ORACLE客户端安装
  13. 用计算机如何扫描文件,打印机扫描文件到电脑方法教程
  14. matlab 模的平方,RSA模重复平方算法小示例
  15. linux添加fuji打印机,Ubuntu16.04下添加打印机FujiXerox CP116w
  16. 全网营销优势在于打造营销闭环,全网营销的经典营销方式推荐
  17. java菜鸟----职业的锐变之路
  18. python 开发视频播放网站_python开发微电影视频网站教程附源码
  19. 贝叶斯统计R语言操作3——假设检验
  20. Android必知必会-自定义Scrollbar样式

热门文章

  1. 《Java语言程序设计》(基础篇原书第10版)第九章复习题答案
  2. java算法大全_java经典算法_算法面试题大全含答案
  3. php时钟制作心得,电子钟课程设计心得
  4. 2017国民行业分类sql-存储过程_存储函数-MySQL
  5. P2P终结者 操作用法(如何限速)
  6. PlistEdit Pro for Mac(Plist编辑器)
  7. 操作系统 李治军 操作系统基础(一)
  8. matlab中低通滤波器程序,MATLAB低通滤波器程序
  9. Java并发编程实战--读书笔记(目录)
  10. 什么是北京54坐标系