用编写消息传送程序物业

菜谱 2021年09月06日

现在介绍客户机程序:

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++络编程的优点,你还可以添加其它功能项,在这我就不多加叙述了。希望我的程序能起到抛砖引玉的目的,让我们都能编出好的络程序。查看本文来源

米诺地尔治疗斑秃
吉林好白癜风医院
开封看白癜风医院哪家好
友情链接: 最全的凯里美食攻略