本文截选了主要的代码片段,供学习参考之用,如有错误,恳请提出或指正,在此表示感谢!
截选代码及实现过程( MFC 版)
Server 端:
// 初始化 ws2.dll 动态库;
if (!AfxSocketInit (&wsadt ))
MessageBox (lpInitError ,NULL ,MB_OK | MB_ICONSTOP );
// 创建 socket ;
g_ServerSocket = new CSocket ;
ServerSocket = socket (AF_INET ,SOCK_STREAM ,IPPROTO_TCP );
if ( ServerSocket == INVALID_SOCKET )
{
iError = WSAGetLastError ();
}
g_ServerSocket ->Attach (ServerSocket );
// 绑定 secket ;
serverService .sin_family = AF_INET ;
serverService .sin_port = htons (3088); //this value must be same as client;
serverService .sin_addr .s_addr = inet_addr("127.0.0.1"); // for testing; memset (serverService .sin_zero ,0,8);
g_ServerSocket ->Bind ((SOCKADDR *) &serverService , sizeof (SOCKADDR ));
// 发送数据;
returnValue = g_AcceptSocket ->Send (wBuffer ,lenth *sizeof (WCHAR ),0);
PostMessage (WM_MYMSG_CHAT ,NULL ,NULL );//continue to receive data ;
// 接收数据 ;
strLength = g_AcceptSocket ->Receive ((char *)wBuffer ,BUFLEN ,0);
Client 端
// 初始化 ws2.dll
if (!AfxSocketInit (&wsadt ))
MessageBox (lpInitError ,NULL ,MB_OK | MB_ICONSTOP );
// 创建 socket;
g_ClientSocket = new CSocket ;
ClientSocket = socket (AF_INET ,SOCK_STREAM ,IPPROTO_TCP );
if ( ClientSocket == INVALID_SOCKET )
{
iError = WSAGetLastError ();
}
flg = g_ClientSocket ->Attach (ClientSocket );
// 连接服务端;
serverService .sin_family = AF_INET ;
serverService .sin_port = htons (30 6 8); //this value must be same with server;
memset (serverService .sin_zero ,0,8);
hstent = gethostbyname (servernm );//resolve the name of host;
serverService .sin_addr = *((struct in_addr *)hstent ->h_addr );
strcpy_s (cSvNm ,hstent ->h_name );
if (!g_ClientSocket ->Connect ((SOCKADDR *) &serverService , sizeof (SOCKADDR )))
{
iError = WSAGetLastError ();
}
// 发送数据;
g_ClientSocket ->Send (wBuf ,lenth *sizeof (WCHAR ),0);
// 接收数据;
g_ClientSocket -> Receive (lpBuf , nBufLen 0);
目前实现情况
已经实现一对一聊天,一问一答的过程,当然这是最简单的;接下来,考虑添加线程操作,使得两端的收发可以同时进行;其次,考虑多clients聊天的实现。
本文介绍了使用MFC实现TCP客户端和服务端的基本流程,包括初始化ws2.dll动态库、创建socket、绑定地址、连接服务端、发送和接收数据等关键步骤,并实现了基本的一对一聊天功能。
1296

被折叠的 条评论
为什么被折叠?



