用编写消息传送程序物业
现在介绍客户机程序:
1.创建一个名为\"client\"的项目,单文档界面.
2.在clientview.h中加入代码:
#include \"winsock.h\"
添加变量:
CString m_data[1000];
HANDLE m_hListenThread;
SOCKET m_sock;
SOCKADDR_IN m_saSrvr;
BOOLIsconnect;
int count;
CSize sizeTotal;
BOOLflag;
3.在构造函数中初始化变量:
CClientView::CClientView()
{
// TODO: add construction code here
Isconnect=FALSE;
=350;
=300;
flag=FALSE;
}
4.在析构函数中完成清除操作:
CClientView::~CClientView()
{
if(m_bInitialized)
WSACleanup();
closesocket(m_sock);
if(m_hListenThread)
::TerminateThread(m_hListenThread,0);
}
5.在菜单中添加\"拨号\"项:
void CClientView::OnDial()
{
// TODO: Add your command handler code here
count=5;
if(m_bInitialized)
{
AfxMessageBox(\"Already dialing\");
return;
}
Cdial dial;
if(Modal()==IDOK!dial.m_Empty())
{
m_n_family=AF_INET;
m_n_addr.S_un.S_addr=htonl(INADDR_ANY);
m_n_addr.S_un.S_addr=inet_addr(dial.m_HostAddress);
m_n_port=htons(5050);
int status;
WSADATA wsaData;
m_data[0]=\"initializing Windows Sockets DLL....\";
if((status=WSAStartup(0x0101,wsaData))==0)
{
m_data[0]+=\"Succeeded\";
m_bInitialized=TRUE;
}
else
{
m_bInitialized=FALSE;
}
m_sock=socket(AF_INET,SOCK_DGRAM,0);
m_data[1]=\"Creating socket....\";
if(m_sock==INVALID_SOCKET)
{
m_data[1]+=\"Failed\";
}
m_data[1]+=\"Succeeded\";
m_data[2]=\"Binding socket....\";
sockaddr_in sa;
n_family=AF_INET;
n_addr.S_un.S_addr=htonl(INADDR_ANY);
n_port=htons(0);
if(bind(m_sock,(PSOCKADDR)sa, sizeof(sa))==SOCKET_ERROR)
{
m_data[2]+=\"Failed\";
closesocket(m_sock);
}
m_data[2]+=\"Succeeded\";
m_data[3]=\"Creating listener thread....\";
unsigned long idThread;
m_hListenThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Listen,(void *)this,0,idThread);
if(m_hListenThread)
{
m_data[3]+=\"Succeeded\";
m_data[4]+=\"Waiting....\";
}
else
m_data[4]+=\"Failed\";
InvalidateRect(NULL);
}
}
6.添加一个拨号对话框,名为dial,有一个文本框用来写IP地址.并在p中添加代码:
#include dial.h
7.在拨号项添加一个判断函数:
void CClientView::OnUpdateDial
(CCmdUI* pCmdUI)
{
陕西西安白糖贸易商刘国良告诉期货 // TODO: Add your command update
UI handler code here
pCmdUI-Enable(TRUE);
if(Isconnect)
pCmdUI-Enable(FALSE);
}
8.添加接收与发送消息的线程:
long WINAPI Listen(CClientView *pView)
{
char msg[2000];
pView- m_data[5]=\"Sending ATTACH command\";
pView- InvalidateRect(NULL);
wsprintf(msg,\"A: \");
sendto(pView- m_sock,msg,1024,0,(PSOCKADDR)pView- m_saSrvr,sizeof(pView- m_saSrvr));
int saSrvrLen ,nchar;
while(1)
{
saSrvrLen=sizeof(pView-m_saSrvr);
nchar=recvfrom(pView- m_sock,msg,1024,0,(PSOCKADDR)pView- m_saSrvr,saSrvrLen);
if(nchar0) { pView-m_data[pView- count++]=\"Error in recvform\";
pView- InvalidateRect(NULL);
}
else
{
pView-m_data[pView- count++]=msg;
pView-Isconnect=TRUE;
pView-flag=TRUE;
pView-InvalidateRect(NULL);
}
}
return(0);
}
9.同主程序一样做一个发送消息项,代码如上.
10.显示程序也与主程序一样,代码如上。
11.在Project中点击Settings中选择Link项添加b。
12.编译程序便可得到e程序。
e 和 e 做完后,就可以在具有TCP/IP协议下的络中执行。通过上面的例子,你可以很快了解vc++络编程的优点,你还可以添加其它功能项,在这我就不多加叙述了。希望我的程序能起到抛砖引玉的目的,让我们都能编出好的络程序。查看本文来源
米诺地尔治疗斑秃吉林好白癜风医院
开封看白癜风医院哪家好
- 上一篇:用纯资源解决国际化问题
- 下一篇:用编写基于的精确定时程计划
-
狗狗挤肛门腺的方法位置
菜谱2022年06月17日
-
狗狗挠眼睛的问题位置
菜谱2022年06月17日
-
狗狗得了青光眼怎么医治位置
菜谱2022年06月17日
-
狗狗得了青光眼怎么办图位置
菜谱2022年06月17日
-
狗狗得了血管瘤怎么办图位置
菜谱2022年06月17日