c++ ABCBank项目(一)
来源:互联网 发布:博雅软件上市吗 编辑:程序博客网 时间:2024/06/05 18:15
这几天一直在c++里写一个ABCBank项目,项目的总体框架和之前写的聊天室或多或少都有些相似的地方,但又大不相同,毕竟一个是c一个是c++,而且这是服务器也即是银行职工与客户之间的直接操作关系,不是客户与客户之间的交流平台。首先,搭建好能使客户与服务器间操作的平台,和c一样,同样需要创建套接口,初始化服务器结构,绑定,监听,连接这几个流程,不过c++中多了一个检查协议栈安装的步骤,这是必不可少的一项内容,下面是服务器和客户端的代码,客户端共有两个线程,一个用来读,一个用来写(传递消息,接受消息):
服务器:
void WSA()//检查协议栈安装情况{WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ){return ;}if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 ) {WSACleanup( );return ; }}int main(){WSA();//创建监听套接口SOCKET listenfd;listenfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);if (listenfd == INVALID_SOCKET){cout<<"1error with code = "<<WSAGetLastError()<<endl;//exit(1);}//初始化服务器地址结构sockaddr_in servaddr;memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(8888);//绑定本地地址和端口号int ret = bind(listenfd, (sockaddr*)&servaddr, sizeof(servaddr));if (ret == SOCKET_ERROR){cout<<"2error with code = "<<WSAGetLastError()<<endl;//exit(1);}//监听套接字ret = listen(listenfd, SOMAXCONN);if (ret == SOCKET_ERROR){cout<<"3error with code = "<<WSAGetLastError()<<endl;//exit(1);}sockaddr_in peeraddr;while (1){int peerlen = sizeof(peeraddr);//等待客户端的连接SOCKET con = accept(listenfd, (sockaddr*)&peeraddr, &peerlen);if (con == INVALID_SOCKET){cout<<"对不起,连接失败 原因是: "<<WSAGetLastError()<<endl;exit(1);}cout<<inet_ntoa(peeraddr.sin_addr)<<" "<<ntohs(peeraddr.sin_port)<<endl;// 客户端连接上, 进行通信,通信使用新的套接字DWORD ThreadID;HANDLE handle = CreateThread(NULL,0,server_request,(LPVOID )con ,0,&ThreadID);if(NULL == handle){cout<<"错误原因是"<<GetLastError()<<endl ;exit(1);}WaitForSingleObject(handle,0);CloseHandle(handle);}WSACleanup();return 0 ;}
客户端:
void WSA()//检查协议栈安装情况{WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ){return ;}if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 ) {WSACleanup( );return ; }}int main(void){WSA() ;//创建监听套接口SOCKET sock;sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);if (sock == INVALID_SOCKET){cout<<"error with code = "<<WSAGetLastError()<<endl;exit(1);}//初始化服务器地址结构sockaddr_in servaddr;memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");servaddr.sin_port = htons(8888);//连接服务器int ret;ret = connect(sock, (sockaddr*)&servaddr, sizeof(servaddr));if (ret == -1){cout<<"2error with code = "<<WSAGetLastError()<<endl;exit(1);}DWORD ThreadID;//创建一个线程用来读服务器发过来的消息HANDLE handle = CreateThread(NULL,0,readinfor,(LPVOID )sock ,0,&ThreadID);if(NULL == handle){cout<<"错误原因是"<<GetLastError()<<endl ;exit(1);}WaitForSingleObject(handle,0);CloseHandle(handle);writeinfor(sock);//写消息给服务器closesocket(sock);return 0;}
搭建好最底层的框架后,接下来就是创建自己所需要的类来完成服务器与客户端的通信。
1 0
- c++ ABCBank项目(一)
- c++ ABCBank项目(二)
- c++ ABCBank项目(三)
- c++ ABCBank项目(四)
- c++ ABCBank项目(五)
- ABCBank(MFC版)
- C#+Matlab项目开发纪实(一)
- (c#)SKYPE API项目总结(一)
- C++N4 实验 (项目一)
- 第十三周项目一c
- C语言项目一:点阵图
- 反射(C#)______ITOO项目技术总结(一)
- 第十五周-C语言 项目一(数组大折腾)
- C++(qt)游戏实战项目:坦克大战(一)
- 【《Objective-C基础教程 》笔记ch02】(一)Hello Object-C 项目
- C/C++/C#问题记录(一)VS2012编译调用dll项目找不到lib的workaround
- C#:项目一 简单的信息管理系统
- 第十六周项目一 c阅读程序
- Python基本数据结构:列表
- [shell] - type command
- 分享一个HTML5的video用法
- JAVA线程概念
- makeinfo 安装
- c++ ABCBank项目(一)
- AndroidStudio提示磁盘空间不足
- Nagios 监控实例部署
- LeetCode:Number Complement
- LeetCode:Number Complement
- Android RecyclerView 快速滑到顶部
- C语言输入(scanf)输出(printf)函数
- Atomic
- mysql 黑窗口连接数据库以及常用数据类型