900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > vc下c语言网络编程 用VC编写C/S消息传送程序

vc下c语言网络编程 用VC编写C/S消息传送程序

时间:2020-05-17 01:50:18

相关推荐

vc下c语言网络编程 用VC编写C/S消息传送程序

下载本文示例代码

网络编程已经成为一种时髦,以TCP/IP协议的网络更为流行.自己编一个服务器与客户机互相传送消息的程序,以便增加自己网络编程的经验。下面我就介绍一下我编的程序。首先介绍服务器程序: 1.创建一个名为"server"的项目,单文档界面. 2.在serverview.h中加入代码:

#include "winsock.h"添加变量:

CSize sizeTotal;//控制滚动条intcount;//信息条数CString m_data[1000];//信息存放char Hostname[260];char Hostaddress[20];//主机IP地址SOCKET m_sock;HANDLE m_hListenThread;//线程BOOL m_bInitialized;//是否初始化WSADATAWSAData;BOOL flag;SOCKADDR_IN saClnt;int saClntLen;BOOL Isconnect;//是否连接3.在serverview.cpp中重载CServerView()构造器,创建并绑定嵌套字:

CServerView::CServerView(){// TODO: add construction code hereIsconnect=FALSE;flag=FALSE;sizeTotal.cy=350;sizeTotal.cx=300;m_hListenThread;count=5;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;sa.sin_family=AF_INET;sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY);sa.sin_port=htons(5050);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] ="Listening....";}elsem_data[4] ="Failed";} 4.在析构函数中完成必需的清除操作:

CServerView::~CServerView(){if(m_bInitialized)WSACleanup();closesocket(m_sock);if(m_hListenThread)::TerminateThread(m_hListenThread,0);}5.定义接收和处理消息的线程:

long WINAPI Listen(CServerView *pView){char msg[2000]="";intnchar;SOCKADDR_IN saClnt;int saClntLen;while(1){saClntLen=sizeof(saClnt);nchar=recvfrom(pView->m_sock,msg,1024,0,(PSOCKADDR)&saClnt,&saClntLen);if(nchar<0) { pView->m_data[pView->count ] ="Error in recvfrom\n";pView->InvalidateRect(NULL);}else{switch(msg[0]){case'A':wsprintf(msg,"A: Client from %sattached\n",inet_ntoa(saClnt.sin_addr));pView->m_data[pView->count ]=msg;pView->flag=TRUE;pView->InvalidateRect(NULL);pView->Isconnect=TRUE;pView->saClnt=saClnt;pView->saClntLen=saClntLen;sendto(pView->m_sock,msg,1024,0,(PSOCKADDR)&saClnt,saClntLen);break;case 'D':wsprintf(msg,"D: Client form %s detached\n",inet_ntoa(saClnt.sin_addr));pView->m_data[pView->count ]=msg;pView->flag=TRUE;pView->InvalidateRect(NULL);pView->Isconnect=FALSE;sendto(pView->m_sock,msg,1024,0,(PSOCKADDR)&saClnt,saClntLen);break;case 'R':saClntLen=sizeof(saClnt);pView->m_data[pView->count ]=msg;pView->flag=TRUE;pView->InvalidateRect(NULL);break;default:break;}}}return(0);}6.在程序菜单项中添加"本机IP地址":

void CServerView::OnIp() {int WSAReturn;WSAReturn=WSAStartup( 0x0101, &WSAData );if( WSAReturn == 0 ){gethostname( Hostname, 260 );struct hostent *pHostEnt;pHostEnt = gethostbyname( Hostname);if( pHostEnt != NULL ){wsprintf( Hostaddress, "%d.%d.%d.%d", ( pHostEnt->h_addr_list[0][0] & 0x00ff ),( pHostEnt->h_addr_list[0][1] & 0x00ff ),( pHostEnt->h_addr_list[0][2] & 0x00ff ),( pHostEnt->h_addr_list[0][3] & 0x00ff ) );CString out;out.Format(Hostaddress);AfxMessageBox(out);}}}7.在程序菜单中添加"发送消息":

void CServerView::OnSendmessage() {// TODO: Add your command handler code herechar msg[2000];Csend Sendmessage;if(Sendmessage.DoModal() ==IDOK&&!Sendmessage.m_Message.IsEmpty()){wsprintf(msg,"R: " Sendmessage.m_Message);sendto(m_sock,msg,1024,0,(PSOCKADDR)&saClnt,saClntLen);m_data[count ]=Sendmessage.m_Message;flag=TRUE;InvalidateRect(NULL);}}8.为发送消息项添加一个对话框的类,名为send,有一个文本框,用来发送消息.并为文本框添加CString m_Message 变量,并在ServerView.cpp中添加#include "send.h" 9.为发送消息项添加一个判断函数:

void CServerView::OnUpdateSendmessage(CCmdUI* pCmdUI) {// TODO: Add your command updateUI handler code herepCmdUI->Enable(FALSE);if(Isconnect)pCmdUI->Enable(TRUE);}10.再窗口显示消息:

void CServerView::OnDraw(CDC* pDC){if(flag){sizeTotal.cy =20;for(int j=65;jTextOut(10,y,m_data[i]);y =20;}// TODO: add draw code for native data here}11.在Project中点击Settings中选择Link项添加wsock32.lib. 最后编译程序,就可以得到Server.exe程序. 共2页。 1 2 :

网络编程已经成为一种时髦,以TCP/IP协议的网络更为流行.自己编一个服务器与客户机互相传送消息的程序,以便增加自己网络编程的经验。下面我就介绍一下我编的程序。首先介绍服务器程序: 1.创建一个名为"server"的项目,单文档界面. 2.在serverview.h中加入代码:

#include "winsock.h"添加变量:

CSize sizeTotal;//控制滚动条intcount;//信息条数CString m_data[1000];//信息存放char Hostname[260];char Hostaddress[20];//主机IP地址SOCKET m_sock;HANDLE m_hListenThread;//线程BOOL m_bInitialized;//是否初始化WSADATAWSAData;BOOL flag;SOCKADDR_IN saClnt;int saClntLen;BOOL Isconnect;//是否连接3.在serverview.cpp中重载CServerView()构造器,创建并绑定嵌套字:

CServerView::CServerView(){// TODO: add construction code hereIsconnect=FALSE;flag=FALSE;sizeTotal.cy=350;sizeTotal.cx=300;m_hListenThread;count=5;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;sa.sin_family=AF_INET;sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY);sa.sin_port=htons(5050);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] ="Listening....";}elsem_data[4] ="Failed";} 4.在析构函数中完成必需的清除操作:

CServerView::~CServerView(){if(m_bInitialized)WSACleanup();closesocket(m_sock);if(m_hListenThread)::TerminateThread(m_hListenThread,0);}5.定义接收和处理消息的线程:

long WINAPI Listen(CServerView *pView){char msg[2000]="";intnchar;SOCKADDR_IN saClnt;int saClntLen;while(1){saClntLen=sizeof(saClnt);nchar=recvfrom(pView->m_sock,msg,1024,0,(PSOCKADDR)&saClnt,&saClntLen);if(nchar<0) { pView->m_data[pView->count ] ="Error in recvfrom\n";pView->InvalidateRect(NULL);}else{switch(msg[0]){case'A':wsprintf(msg,"A: Client from %sattached\n",inet_ntoa(saClnt.sin_addr));pView->m_data[pView->count ]=msg;pView->flag=TRUE;pView->InvalidateRect(NULL);pView->Isconnect=TRUE;pView->saClnt=saClnt;pView->saClntLen=saClntLen;sendto(pView->m_sock,msg,1024,0,(PSOCKADDR)&saClnt,saClntLen);break;case 'D':wsprintf(msg,"D: Client form %s detached\n",inet_ntoa(saClnt.sin_addr));pView->m_data[pView->count ]=msg;pView->flag=TRUE;pView->InvalidateRect(NULL);pView->Isconnect=FALSE;sendto(pView->m_sock,msg,1024,0,(PSOCKADDR)&saClnt,saClntLen);break;case 'R':saClntLen=sizeof(saClnt);pView->m_data[pView->count ]=msg;pView->flag=TRUE;pView->InvalidateRect(NULL);break;default:break;}}}return(0);}6.在程序菜单项中添加"本机IP地址":

void CServerView::OnIp() {int WSAReturn;WSAReturn=WSAStartup( 0x0101, &WSAData );if( WSAReturn == 0 ){gethostname( Hostname, 260 );struct hostent *pHostEnt;pHostEnt = gethostbyname( Hostname);if( pHostEnt != NULL ){wsprintf( Hostaddress, "%d.%d.%d.%d", ( pHostEnt->h_addr_list[0][0] & 0x00ff ),( pHostEnt->h_addr_list[0][1] & 0x00ff ),( pHostEnt->h_addr_list[0][2] & 0x00ff ),( pHostEnt->h_addr_list[0][3] & 0x00ff ) );CString out;out.Format(Hostaddress);AfxMessageBox(out);}}}7.在程序菜单中添加"发送消息":

void CServerView::OnSendmessage() {// TODO: Add your command handler code herechar msg[2000];Csend Sendmessage;if(Sendmessage.DoModal() ==IDOK&&!Sendmessage.m_Message.IsEmpty()){wsprintf(msg,"R: " Sendmessage.m_Message);sendto(m_sock,msg,1024,0,(PSOCKADDR)&saClnt,saClntLen);m_data[count ]=Sendmessage.m_Message;flag=TRUE;InvalidateRect(NULL);}}8.为发送消息项添加一个对话框的类,名为send,有一个文本框,用来发送消息.并为文本框添加CString m_Message 变量,并在ServerView.cpp中添加#include "send.h" 9.为发送消息项添加一个判断函数:

void CServerView::OnUpdateSendmessage(CCmdUI* pCmdUI) {// TODO: Add your command updateUI handler code herepCmdUI->Enable(FALSE);if(Isconnect)pCmdUI->Enable(TRUE);}10.再窗口显示消息:

void CServerView::OnDraw(CDC* pDC){if(flag){sizeTotal.cy =20;for(int j=65;jTextOut(10,y,m_data[i]);y =20;}// TODO: add draw code for native data here}11.在Project中点击Settings中选择Link项添加wsock32.lib. 最后编译程序,就可以得到Server.exe程序. 共2页。 1 2 :

下载本文示例代码

用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序用VC编写C/S消息传送程序

阅读(42) | 评论(0) | 转发(0) |

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。