基于socket的简单聊天程序(二)

本文截选了主要的代码片段,供学习参考之用,如有错误,恳请提出或指正,在此表示感谢!

 

                                  截选代码及实现过程( 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聊天的实现。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值