vc++6.0编的基于mfc的简单的tcp聊天程序

author author     2023-03-09     728

关键词:

有客户端和服务器,能发送接收消息 ,有简单的界面

参考技术A 4.1服务器端代码

开启服务器功能:

void OnServerOpen() //开启服务器功能

WSADATA wsaData;
int iErrorCode;
char chInfo[64];
if (WSAStartup(WINSOCK_VERSION, &wsaData)) //调用Windows Sockets DLL
MessageBeep(MB_ICONSTOP);
MessageBox("Winsock无法初始化!", AfxGetAppName(), MB_OK|MB_ICONSTOP);
WSACleanup();
return;
else
WSACleanup();
if (gethostname(chInfo, sizeof(chInfo)))
ReportWinsockErr("\n无法获取主机!\n ");
return;
CString csWinsockID = "\n==>>服务器功能开启在端口:No. ";
csWinsockID += itoa(m_pDoc->m_nServerPort, chInfo, 10);
csWinsockID += "\n";
PrintString(csWinsockID); //在程序视图显示提示信息的函数,读者可自行创建
m_pDoc->m_hServerSocket=socket(PF_INET, SOCK_STREAM, DEFAULT_PROTOCOL);
//创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信
if (m_pDoc->m_hServerSocket == INVALID_SOCKET)
ReportWinsockErr("无法创建服务器socket!");
return;
m_pDoc->m_sockServerAddr.sin_family = AF_INET;
m_pDoc->m_sockServerAddr.sin_addr.s_addr = INADDR_ANY;
m_pDoc->m_sockServerAddr.sin_port = htons(m_pDoc->m_nServerPort);
if (bind(m_pDoc->m_hServerSocket, (LPSOCKADDR)&m_pDoc->m_sockServerAddr,
sizeof(m_pDoc->m_sockServerAddr)) == SOCKET_ERROR) //与选定的端口绑定
ReportWinsockErr("无法绑定服务器socket!");
return;
iErrorCode=WSAAsyncSelect(m_pDoc->m_hServerSocket,m_hWnd,
WM_SERVER_ACCEPT, FD_ACCEPT);
//设定服务器相应的网络事件为FD_ACCEPT,即连接请求,
// 产生相应传递给窗口的消息为WM_SERVER_ACCEPT
if (iErrorCode == SOCKET_ERROR)
ReportWinsockErr("WSAAsyncSelect设定失败!");
return;
if (listen(m_pDoc->m_hServerSocket, QUEUE_SIZE) == SOCKET_ERROR) //开始监听客户连接请求
ReportWinsockErr("服务器socket监听失败!");
m_pParentMenu->EnableMenuItem(ID_SERVER_OPEN, MF_ENABLED);
return;
m_bServerIsOpen = TRUE; //监视服务器是否打开的变量
return;


响应客户发送聊天文字到服务器:ON_MESSAGE(WM_CLIENT_READ, OnClientRead)

LRESULT OnClientRead(WPARAM wParam, LPARAM lParam)

int iRead;
int iBufferLength;
int iEnd;
int iRemainSpace;
char chInBuffer[1024];
int i;
for(i=0;(i
//MAXClient是服务器可响应连接的最大数目

if(i==MAXClient) return 0L;
iBufferLength = iRemainSpace = sizeof(chInBuffer);
iEnd = 0;
iRemainSpace -= iEnd;
iBytesRead = recv(m_aClientSocket[i], (LPSTR)(chInBuffer+iEnd), iSpaceRemaining, NO_FLAGS);
//用可控缓冲接收函数recv()来接收字符
iEnd+=iRead;
if (iBytesRead == SOCKET_ERROR)
ReportWinsockErr("recv出错!");
chInBuffer[iEnd] = '\0';
if (lstrlen(chInBuffer) != 0)
PrintString(chInBuffer); //服务器端文字显示
OnServerBroadcast(chInBuffer); //自己编写的函数,向所有连接的客户广播这个客户的聊天文字

return(0L);


对于客户断开连接,会产生一个FD_CLOSE消息,只须相应地用closesocket()关闭相应的Socket即可,这个处理比较简单。

4.2客户端代码

连接到服务器:

void OnSocketConnect()
WSADATA wsaData;
DWORD dwIPAddr;
SOCKADDR_IN sockAddr;
if(WSAStartup(WINSOCK_VERSION,&wsaData)) //调用Windows Sockets DLL
MessageBox("Winsock无法初始化!",NULL,MB_OK);
return;

m_hSocket=socket(PF_INET,SOCK_STREAM,0); //创建面向连接的socket
sockAddr.sin_family=AF_INET; //使用TCP/IP协议
sockAddr.sin_port=m_iPort; //客户端指定的IP地址
sockAddr.sin_addr.S_un.S_addr=dwIPAddr;
int nConnect=connect(m_hSocket,(LPSOCKADDR)&sockAddr,sizeof(sockAddr)); //请求连接
if(nConnect)
ReportWinsockErr("连接失败!");
else
MessageBox("连接成功!",NULL,MB_OK);
int iErrorCode=WSAAsyncSelect(m_hSocket,m_hWnd,WM_SOCKET_READ,FD_READ);
//指定响应的事件,为服务器发送来字符
if(iErrorCode==SOCKET_ERROR)
MessageBox("WSAAsyncSelect设定失败!");


接收服务器端发送的字符也使用可控缓冲接收函数recv(),客户端聊天的字符发送使用数据可控缓冲发送函数send(),这两个过程比较简单,在此就不加赘述了。
参考技术B 又是个要代码的.
有问题你说出一,大家帮你解决嘛,你这样直接要代码,感觉上给你代码,我是在害人啊,我很难做的...

网络协议分析课程设计:基于tcp协议网上聊天程序

...。最好是整个课程设计报告。急需!先谢过各位大触了!基于TCP协议网上聊天程序有的参考技术A写作攻略网上很多。说实话一下是教不会的。多查阅资料。或帮你处理。 参考技术B以前弄过一个不过,硬盘坏了就丢失了。无能为... 查看详情

实现 COM 接口 C++ / VC++ 6.0 / MFC

...发布时间】:2011-09-2919:45:40【问题描述】:这里的入门级程序员试图实现一个COM接口。我正在开发一个与Aloha销售点系统交互的程序。Aloha使用COM来处理外部程序。我正在尝试从mag读卡器截取卡数据,它是OPOS读卡器,而不是键盘... 查看详情

java案例:基于tcp的简单聊天程序(代码片段)

文章目录一、如何实现TCP通信二、编写C/S架构聊天程序(一)编写服务器端程序-Server.java(二)编写客户端程序-Client.java(三)测试服务器端与客户端能否通信(四)程序优化思路-服务器端采用多... 查看详情

java网络编程基础—基于tcp的nio简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统。其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户。但是由于它是基于Socket的,因此是... 查看详情

vc基于单文档opengl框架(代码片段)

本文是在VC6.0的环境下,运用MFC实现的OpenGL最基本框架,需要简单了解MFC编程(会在VC6.0里创建MFC单文档应用程序就行),甚至不必了解OpenGL的知识。以下是具体的步骤。1、创建MFC单文档应用程序2、添加libProject->Setting->Link... 查看详情

基于vc++的mfc类库实现的简单ftp客户端

1FTP客户端设计思想在WINDOWS环境下,使用VC++开发工具实现一个FTP客户端软件。在本次FTP的设计中主要使用WinInetAPI编程,无需考虑基本的通信协议和底层的数据传输工作,MFC提供的WinInet类是对WinInetAPI函数封装而来的,它为用户提... 查看详情

mingw与vc++6.0的区别有那些

...编译MFC,可惜没试过。(4)库的依赖。MinGW生成的纯Win32程序只对msvcrt.dll有依赖,vc6不太清楚。(5)MinGW其实只是一个编译环境,没有IDE,当然你也可以装上dev-c++这个用MinGW的IDE。而VC6除了可以编译,本身就带一个功能强大的IDE... 查看详情

在 MFC VS2010 和 VC++6.0 中画线没有得到相同的结果

...画线,但是在vs2010好像不行,我只加了两个窗口消息处理程序,WM_LBUTTONDO 查看详情

基于vc++的mfc类库实现的简单ftp客户端

1FTP客户端设计思想在WINDOWS环境下,使用VC++开发工具实现一个FTP客户端软件。在本次FTP的设计中主要使用WinInetAPI编程,无需考虑基本的通信协议和底层的数据传输工作,MFC提供的WinInet类是对WinInetAPI函数封装而来的,它为用户提... 查看详情

如何将 VC++6.0 项目升级到 VS2010?

...间】:2015-04-2205:20:18【问题描述】:我有用VC++6.0编写的基于MFC对话的应用程序。由于我的工作环境要求,我需要升级到VisualStudio2010。我不需要添加任何新功能,只需使用升级后的VisualStudio编译即可。有人可以指导我吗?所有主... 查看详情

java网络编程基础---基于tcp的简单聊天系统

实现思路:    要实现消息的发送,客户端每次在连接服务器端时都需要告诉服务器自己的用户名,以便能够接收到发送给自己的消息。服务器端在接收到消息时,能够查到对应用户名的客户端,将消息发送给该客... 查看详情

vc小工具.最简单tcp服务器(代码片段)

1、C++基于TCP_IP简单的客户端、服务器通信程序实例-happy_xiahuixiax的博客-CSDN博客.html(https://blog.csdn.net/happy_xiahuixiax/article/details/72627426)2、3、代码:(VC6编译通过,未测试...)#include<WinSock2.h>#include<stdio.h>#i 查看详情

基于tcp的聊天系统

基于TCP的聊天系统1、项目简介​该聊天系统的设计采用了Client/Server模型,利用socket网络编程和多线程编程等相关知识开发了一款基于TCP的聊天系统,实现了客户端之间的点对点通信。2、项目运行结果示展示2.1项目开发... 查看详情

网络编程的疑惑~~

我现在使用VC++6.0编写基于Winpcap抓包的MFC程序,具体就是实现捕获数据包,然后以列表显示出来,还要有数据包的详细信息,但这个程序需要过滤出数据包中属于HTTP协议这部分,而我现在对Winpcap还是不太熟悉,请问这需要如何... 查看详情

java利用tcp编程实现简单聊天室

...编程。  TCP传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,在Java中我们利用ServerSocket类来建立服务端,利用Socket类来建立客户端。这里要注意,在TCP中,Socket实际上是指Ser 查看详情

java实现一个简单的网络聊天程序

一.TCP通信概述TCP协议是面向连接的通信协议,在传输数据之前,发送端和接收端必须建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服... 查看详情

基于tcp协议简单qq聊天(代码片段)

#server端importsocketip_port=(‘127.0.0.1‘,8080)sk=socket.socket()sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)sk.bind(ip_port)sk.listen()conn,addr=sk.accept()whileTrue:msg=conn.recv(1024).deco 查看详情

基于tcp的聊天系统

基于TCP的聊天系统1、项目简介​该聊天系统的设计采用了Client/Server模型,利用socket网络编程和多线程编程等相关知识开发了一款基于TCP的聊天系统,实现了客户端之间的点对点通信。2、项目运行结果示展示2.1项目开发... 查看详情