18,363
社区成员




服务器端:
void CTCPServerDlg::OnSend()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_sockListen.Create(m_ServerPort,SOCK_STREAM,NULL)) //创建监听套接字
{
GetDlgItem(IDC_SEND)->EnableWindow(false); //启动按钮无效
GetDlgItem(IDC_STOP)->EnableWindow(true); //停止按钮生效
m_sockListen.Bind(m_ServerPort,m_ServerIP); //绑定本地套接口
if(m_sockListen.Listen())
{
m_ServerStatus="服务器处于监听状态";
UpdateData(false);
//等待连接请求,m_sockSend为发送套接字,用于通信
m_sockListen.Accept(m_sockSend);//阻塞,当有连接进入时,才返回
m_sockListen.Close();
SetTimer(1,3000,NULL); //创建一个定时器定时发送
}
}
else
{
AfxMessageBox("Socket创建失败!");
}
}
void CTCPServerDlg::OnStop()
{
// TODO: Add your control notification handler code here
KillTimer(1); //清除定时器
m_sockSend.Close(); //关闭发送套接字
m_ServerStatus="服务器停止发送数据";
UpdateData(false);
GetDlgItem(IDC_SEND)->EnableWindow(true); //发送按钮生效
GetDlgItem(IDC_STOP)->EnableWindow(false); //停止按钮无效
}
void CTCPServerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static iIndex=0; //静态变量,用于计数
char szSend[20];
sprintf(szSend,"%010d",iIndex++); //发送的数据置入缓冲区
//发送TCP数据
int iSend= m_sockSend.Send(szSend,10,0);
m_sendcount+=iSend;//发送字节数
CString str=szSend;
m_ServerStatus="正在发送数据"+str;
UpdateData(false);
CDialog::OnTimer(nIDEvent);
}
客户端程序
void CTCPClientDlg::OnReceive()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_sockReceive.Create()) //创建套接字
{
//发起连接请求
m_sockReceive.Connect(m_ServerIP,m_ServerPort);//连接服务器,成功后返回
SetTimer(1,1000,NULL); //创建一个定时器定时接收
m_ReceiveData="成功连接服务器!";
UpdateData(false);
GetDlgItem(IDC_RECEIVE)->EnableWindow(false); //接收按钮无效
GetDlgItem(IDC_STOP)->EnableWindow(true); //停止按钮生效
}
else
{
AfxMessageBox("Socket创建失败!");
}
}
void CTCPClientDlg::OnStop()
{
// TODO: Add your control notification handler code here
KillTimer(1); //关闭定时器
m_sockReceive.Close(); //关闭套接字
m_ReceiveData="停止接收数据!";
UpdateData(false);
GetDlgItem(IDC_RECEIVE)->EnableWindow(true); //接收按钮生效
GetDlgItem(IDC_STOP)->EnableWindow(false); //停止按钮无效
}
void CTCPClientDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
char szRecv[20];
int iRecv =m_sockReceive.Receive(szRecv,10,0);//接收TCP数据
if(iRecv>=0)
{
szRecv[iRecv]=NULL;
m_ReceiveData=szRecv; //记录接收数据
m_receivecount+=iRecv; //接收字节数
m_ReceiveData=m_ReceiveData;
}
else //如果没有接收到任何数据
{
m_ReceiveData="没有收到数据!";
}
UpdateData(false);
CDialog::OnTimer(nIDEvent);[code=c]