网络编程 C++ ———MFC Socket
2012-04-26 23:11
344 查看
网络编程 C++ ———MFC Socket
MFC 中封装了CAsyncSokect 类和CSocket类 ,置于类库之中。CAsyncSokect 类要求程序员对网络通信和套接字编程模式有相当的理解,要程序员机子编程处理阻塞、字节顺序以及Unicode与MBCS之间的转换问题。 CSocket类则比较简单 ,同与之搭配的CSocketFile类和CAchive类编写网络程序更加简单便利。
CAsyncSokect 编程
1)创建Socket
构造CAsyncSokect类,再调用其Create成员方法创建底层套接字。
例子说明:
MFC 定义了一个内部类CSocketWnd,当调用Create函数创建一个套接字时,就会将该套接字连接到一个窗口(CsocketWnd 对象),CAsyncSokect的回调函数DoCallBack函数为该窗口的回调函数。这样当一个网络事件发生时,经过MFC的消息循环,DoCallBack函数会根据不同的事件调用响应的处理函数。MFC将这些函数定义为虚函数,在编程是必须重载需要的消息处理函数。
2) 客户端连接和服务端监听
ClientSocket.Connect(addr,port);
ServerSocket.Listen();
ServerSocket.Accpet(CAsyncSokect & rConnectedsocket);
3) 数据收发
Send () 、Sendto() 、Receive()ReceiveFrom()
CSocket 编程
CSocket 是CAsyncSokect的派生类 。
1) 创建Socket
Create()函数继承CAsyncSokect的Create()函数 ; 也是一样先构造对象,再调用Create()方法创建套接字。
服务器端:
CSocket sockSrv;
sockSrv.Create(port);
客户端 :
CSocket sockClient ;
sockClient.Create();
2)连接与监听
同CAsyncSokect 一样 。
服务器端:
sockSrv.Listen();
CSocket sockRecv ;
sockSrv.Accept(sockRecv);
客户端:
sockClient.Connect(strAddr,port);
3)数据传输
服务端程序 :
// 创建与CSocket类的对象相连接的CSocketFile类对象。
CSocketFile file(&sockRecv);
//创建与CSocketFile类的对象相连接的CAchive类对象,用于存放要发送的数据 ;
CAchive arin(&file,CAchive ::load);
//创建与CSocketFile类的对象相连接的CAchive类对象,用于存放接收的数据 ;
CAchive arout(&file,CAchive ::load);
arin>>dwValue; //发送数据dwVlaue
arout<<dwValue; // 接收数据dwVlaue
客户端程序:
// 创建与CSocket类的对象相连接的CSocketFile类对象。
CSocketFile file(&sockClient);
//创建与CSocketFile类的对象相连接的CAchive类对象,用于存放要发送的数据 ;
CAchive arin(&file,CAchive ::load);
//创建与CSocketFile类的对象相连接的CAchive类对象,用于存放接收的数据 ;
CAchive arout(&file,CAchive ::load);
arin>>dwValue; //发送数据dwVlaue
arout<<dwValue; // 接收数据dwVlaue
4) 释放资源
网络通信结束后,对于栈中的类对象会自动调用其析构函数。 对于队中的则需要delete 手动释放 。
除了利用CSocketFile 类的对象和CAchive类的对象辅助数据传输外,利用CSocket的成员函数(Send ()、SendTo()、Receive()、ReceiveFrom())同样可以实现数据传输。
MFC 中封装了CAsyncSokect 类和CSocket类 ,置于类库之中。CAsyncSokect 类要求程序员对网络通信和套接字编程模式有相当的理解,要程序员机子编程处理阻塞、字节顺序以及Unicode与MBCS之间的转换问题。 CSocket类则比较简单 ,同与之搭配的CSocketFile类和CAchive类编写网络程序更加简单便利。
CAsyncSokect 编程
1)创建Socket
构造CAsyncSokect类,再调用其Create成员方法创建底层套接字。
BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, //通知相关窗口的消息 LPCTSTR lpszSocketAddress = NULL );对于服务器必须指定端口,客户端不指定的话系统自己分配。
例子说明:
CAsyncSokect ssocket; int port=27; ssocket.Create(port,SOCK_DRAM);创建一个数据报套接字 。
CAsyncSokect * psserver= new CAsyncSocket ; int port=27; psscoket->Create(port);创建一个流式套接字。
CAsyncSokect ClientSocket ; ClientSocket.Create();为客户端创建一个流式套接字 。
MFC 定义了一个内部类CSocketWnd,当调用Create函数创建一个套接字时,就会将该套接字连接到一个窗口(CsocketWnd 对象),CAsyncSokect的回调函数DoCallBack函数为该窗口的回调函数。这样当一个网络事件发生时,经过MFC的消息循环,DoCallBack函数会根据不同的事件调用响应的处理函数。MFC将这些函数定义为虚函数,在编程是必须重载需要的消息处理函数。
2) 客户端连接和服务端监听
ClientSocket.Connect(addr,port);
ServerSocket.Listen();
ServerSocket.Accpet(CAsyncSokect & rConnectedsocket);
3) 数据收发
Send () 、Sendto() 、Receive()ReceiveFrom()
CSocket 编程
CSocket 是CAsyncSokect的派生类 。
1) 创建Socket
Create()函数继承CAsyncSokect的Create()函数 ; 也是一样先构造对象,再调用Create()方法创建套接字。
服务器端:
CSocket sockSrv;
sockSrv.Create(port);
客户端 :
CSocket sockClient ;
sockClient.Create();
2)连接与监听
同CAsyncSokect 一样 。
服务器端:
sockSrv.Listen();
CSocket sockRecv ;
sockSrv.Accept(sockRecv);
客户端:
sockClient.Connect(strAddr,port);
3)数据传输
服务端程序 :
// 创建与CSocket类的对象相连接的CSocketFile类对象。
CSocketFile file(&sockRecv);
//创建与CSocketFile类的对象相连接的CAchive类对象,用于存放要发送的数据 ;
CAchive arin(&file,CAchive ::load);
//创建与CSocketFile类的对象相连接的CAchive类对象,用于存放接收的数据 ;
CAchive arout(&file,CAchive ::load);
arin>>dwValue; //发送数据dwVlaue
arout<<dwValue; // 接收数据dwVlaue
客户端程序:
// 创建与CSocket类的对象相连接的CSocketFile类对象。
CSocketFile file(&sockClient);
//创建与CSocketFile类的对象相连接的CAchive类对象,用于存放要发送的数据 ;
CAchive arin(&file,CAchive ::load);
//创建与CSocketFile类的对象相连接的CAchive类对象,用于存放接收的数据 ;
CAchive arout(&file,CAchive ::load);
arin>>dwValue; //发送数据dwVlaue
arout<<dwValue; // 接收数据dwVlaue
4) 释放资源
网络通信结束后,对于栈中的类对象会自动调用其析构函数。 对于队中的则需要delete 手动释放 。
除了利用CSocketFile 类的对象和CAchive类的对象辅助数据传输外,利用CSocket的成员函数(Send ()、SendTo()、Receive()、ReceiveFrom())同样可以实现数据传输。
相关文章推荐
- 网络编程 C++ ———MFC Socket
- 学习C/C++下的socket网络编程
- linux下C/C++网络编程基本:socket实现tcp和udp的例子
- Windows Socket 网络编程 MFC类 CSocket
- C++网络编程 如何使用SOCKET 发送HTTP1.1 GET POST请求包
- C++网络编程之socket
- C++ 网络编程之使用socket + epoll 模拟http 的请求与响应
- Linux下Socket网络接口编程(C++)
- MFC - 网络编程 (孙鑫C++第十四讲笔记整理)
- 基于Socket的MFC网络编程
- 如何基于TCP/IP协议进行MFC Socket网络通讯编程
- Linux C++/Java/Web/OC Socket网络编程
- C++网络编程 如何使用SOCKET 发送HTTP1.1 GET POST请求包
- C++中Socket网络编程实例详解
- 【C++】winsocket网络编程实例
- c++ 网络编程 socket 聊天客户端/服务器
- C++网络编程之Socket编程
- MFC Socket网络编程之TCP客户端
- 【网络SOCKET编程】DEV-C/C++ 编译时出现undefined reference to `WSAStartup@8'等错误解决办法
- MFC socket编程 网络五子棋详解