程序中写了两个类,CServer和CClent类,

分别是:

/**************CServer****************/

private:
 void ServerInit();
public:
 BOOL InitAndListen(HWND hwnd,UINT port);
public:
 SOCKET m_hSocket;  //socket 句柄
 SOCKET m_connect; 
 sockaddr_in m_addr;
 UINT m_uPort;
 HWND m_hWnd;

/******************.cpp**************/

CServer::CServer()
{

}

CServer::~CServer()
{
 WSAAsyncSelect(m_hSocket, m_hWnd, 0, 0);
}

BOOL CServer::InitAndListen(HWND hwnd,UINT port)
{
 m_uPort=port;
 m_hWnd=hwnd;
 
 if(m_hSocket != NULL)
 {
  //如果已经创建了套接字先关闭原来的
  closesocket(m_hSocket);
  m_hSocket = NULL;
 }
 if(m_hSocket == NULL)
 {
  //创建新的套接字,这里是创建的流类型的套接字
  m_hSocket = socket(AF_INET, SOCK_STREAM,0);
  ASSERT(m_hSocket != NULL);
  ServerInit();
 }
 m_addr.sin_family = AF_INET;
 m_addr.sin_addr.S_un.S_addr = INADDR_ANY;
 m_addr.sin_port = htons(m_uPort);
 
 int ret = 0;
 int error = 0;
 //绑定一个套接字到本机的地址
 ret = bind(m_hSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr));
 
 if(ret == SOCKET_ERROR)
 { //绑定错误
  AfxMessageBox("已经建立服务器!");
  return FALSE;
 }
 
 //开始一个侦听过程,等待客户的连接
 ret = listen(m_hSocket, 5);    //这里的第二个参数表示最多支持的客户连接数
 if(ret == SOCKET_ERROR)
 { //listen失败
  AfxMessageBox("监听失败!");
  return FALSE;
 }
 
 return TRUE;
}

void CServer::ServerInit()
{
 if(WSAAsyncSelect(m_hSocket, m_hWnd, SER_MESSAGE, FD_ACCEPT|FD_READ|FD_WRITE|FD_CLOSE)>0)
  AfxMessageBox("选择错误");
}

/*****************CClent******************/

#include "winsock.h"

private:
 void ClientInit();
public:
 BOOL InitAndConnet(HWND hwnd,UINT port,CString m_strServer);
 void GetString(CString & str);
 void SendString(CString a);
public:
 CString m_strServer;
 SOCKET m_hSocket;
 sockaddr_in m_addr;
 UINT m_uPort;
 HWND m_hWnd;

CClient::CClient()
{
 m_hSocket =NULL;
}

CClient::~CClient()
{

}

BOOL CClient::InitAndConnet(HWND hwnd,UINT port,CString strserver)
{
 m_hWnd=hwnd;
 m_uPort=port;
 m_strServer=strserver;
 if(m_hSocket != NULL)
 {
  //如果原来打开这套接字先关闭
  closesocket(m_hSocket);
  m_hSocket = NULL;
 }
 if(m_hSocket == NULL)
 {
  //创建新的流套接字
  m_hSocket = socket(AF_INET, SOCK_STREAM,0);
  ASSERT(m_hSocket != NULL);
  ClientInit();
 }
 
 //准备服务器的信息,这里需要指定服务器的地址
 m_addr.sin_family = AF_INET;
 m_addr.sin_addr.S_un.S_addr = inet_addr(m_strServer.GetBuffer(0));
 m_addr.sin_port = htons(m_uPort);   //改变端口号的数据格式
 
 //这里主动连接服务器,该过程将等待一定时间
 int ret = 0;
 int error = 0;
 ret = connect(m_hSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr));
 if(ret == SOCKET_ERROR)
 {//连接失败
  if(GetLastError()!=WSAEWOULDBLOCK)
  {
   AfxMessageBox(_T("请确认服务器确实已经打开并工作在同样的端口!"));
   return FALSE;
  }
 }
 return TRUE;
}

void CClient::SendString(CString a)
{
 if(send(m_hSocket,a.GetBuffer(0),a.GetLength(),0)==SOCKET_ERROR)
 {
  AfxMessageBox("客户端发送数据错误");
 }
}

void CClient::GetString(CString &str)
{
 recv(m_hSocket,str.GetBuffer(0),1024,MSG_DONTROUTE);
}

void CClient::ClientInit()
{
 if(WSAAsyncSelect(m_hSocket,m_hWnd,CLI_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT)>0)
 {
  AfxMessageBox("选择错误");
 }
}

定义对象,调用函数就可以了

mfc做一个网络聊天工具相关推荐

  1. 自己动手做一个局域网聊天工具(一)

     作者:朱金灿 来源:http://blog.csdn.net/clever101 现在部门使用的局域网聊天工具是飞秋,但是飞秋总是不够稳定,有时会掉线.这使我萌生一个念头:做一个局域网聊天工具. ...

  2. JAVA进阶案例 TCP编程之网络聊天工具(服务端)

    实现分析. 1.开启服务端 客户端选择'登录以后'后,提示输入用户名和密码,验证成功则进入好友列表界面 2.用户聊天 双击好友,进入好友聊天界面.在信息框编辑信息 点击发送 当客户端向服务端发送数据时 ...

  3. 基于WebServices简易网络聊天工具的设计与实现

    基于WebServices简易网络聊天工具的设计与实现 Copyright 朱向洋 Sunsea ALL Right Reserved 一.项目内容 本次课程实现一个类似QQ的网络聊天软件的功能:服务 ...

  4. TcpClient和TcpListener 类的使用-编写一个点对点聊天工具(初级入门篇)

    TcpClient类和TcpListener类属于.NET框架下网络通信中的应用层类,为Socket通信提供了更简单,对用户更为友好的接口.应用层类比位于底层的Socket类提供了更高层次的抽象,封装 ...

  5. 个人看法---如何做一个视频聊天室?

    个人而言,做一个视频聊天室,是可以自己建的,不过比较废资源,也不一定做得好: 另外,可以考虑选用第三方即时通讯云的方式,也比较常见.不过这块要注意几个问题: 一.即时通讯云商是否掌握即时通讯核心技术, ...

  6. 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具。QQ_Chat

    代码下载地址 原博客地址 QQ_Chat 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具. (内含报告) 工具: Eclipse.Navicat for MySQL ...

  7. 聊天系统设计与实现服务器代码,网络聊天工具系统的设计与实现.doc

    PAGE 综合课程设计报告 网络聊天工具系统的设计与实现 学生姓名: 指导教师: 所 在 系: 电 子 信 息 系 所学专业: 计算机科学与技术 年 级: PAGE 1 1 目 录 TOC \o &q ...

  8. 基于UDP协议的局域网网络聊天工具

    /* * 本程序实现了基于UDP协议的局域网网络聊天工具. * 参考网上的源码,发现一个calss就可以搞定. * ChatFrame类创建窗口,包含JTextField和TextArea. * 前者 ...

  9. 【亡羊补牢】计算机网络灵魂之问 第9期 如果让你做一个视频聊天软件,你用tcp还是udp?为什么?

    这是博主面向腾讯学习的面试题大整理系列,可以在如下github仓库Issues中通过 Labels 标签分类查看相关内容,同时欢迎大家指正可能的错误并且提出自己的解答,希望大家学的鱼块,春秋招顺利! ...

最新文章

  1. python 学习 [day8]class成员
  2. SQL Server 自定义快捷键
  3. 关于CEdit控件的透明
  4. Python必备封装基本代码~Python函数
  5. 测开之路二十二:迭代器、生成器
  6. byte[] 转化为 string 转化为汉字和字母
  7. 用什么软件测试固态硬盘坏没坏,SSD能用多久在哪看 检测固态硬盘寿命方法
  8. crio电压采集 labview_基于LabVIEW和CompactRIO开发的EDM过程控制器
  9. 国内下载Android源码教程
  10. melp算法matlab,svpwm过调制算法研究与实现 [MELP声码器的算法研究及实现]
  11. 在项目中怎样写故障树或者类层次
  12. 在电脑上如何直接下载秒拍的视频?
  13. 剖析 Microsoft.AspNetCore.Identity 的精髓 —— 前言
  14. 想把语音转成文字,就这样做
  15. GEE:基于GEE的单个湖泊的实时水体提取(以武汉东湖为例)
  16. 华为 eNSP easy ip转换实验+NAT服务器
  17. JMeter 图片上传接口进行压力测试
  18. mac重装系统 未能与恢复服务器,Mac系统重装后数据可不可以恢复
  19. 求1+2!+3!+...+N!的和
  20. 黑人太管用计算机来打出来的音乐,求欧美黑人饶舌歌曲,节奏感要很强劲的那种。。。 (在百度上搜了,对味的只有少数)...

热门文章

  1. MRPII/ERP对企业经营方式转变的影响(转)
  2. tcp网络服务模型,redis,nginx,memcached一起搞定
  3. Tina R329 swupdate OTA升级步骤
  4. Learning to Track with Object Permanence GRU模块以及损失函数解析
  5. 【电力电子技术DC-AC】单相双极性SPWM逆变电路 Simulink仿真
  6. 报错:PicklingError: Can‘t pickle <type ‘function‘>: attribute lookup __builtin__.function failed
  7. SMMU架构手册之数据结构和转换流程(1)
  8. Git小白字典——Git基本命令大全
  9. from math import *
  10. 使用 Python 模块 bluepy 玩转 BLE