养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

如何在mfc制作的聊天程序下实现发送图片

时间:2024-10-02 03:28:20

本经验文章主要介绍一下,如何在mfc制作的聊天程序下实现发送图片,讲述发送的实现原理,以及参考代码的实现

工具/原料

MFC

VS2013

方法/步骤

1、首先,图片是一稍僚敉视个文件,如果要发送到其它的设备,必须通过一种传方式实现发送,通常MFC聊天程序的发送多半是通过网络协议实现的,最简单的就是TCP\UDP\HTTP等,这些常用的网络协议芟坳葩津,常用的协议参考下图所示

如何在mfc制作的聊天程序下实现发送图片

2、这里我里使用TCP协楠粲胂部议实现图片的发送,其实就是将图片数据读取到内存,然后通过TCP协议封装成数据包发送到对端,对端接收后,再将数据写入到文件就可以实现了,具体的TCP数据包结构,可以参考下图

如何在mfc制作的聊天程序下实现发送图片

3、接下来,我们新建一个MFC示例工程,用来简单的实现TCP发送代码,工程创建过程如下图所示

如何在mfc制作的聊天程序下实现发送图片

如何在mfc制作的聊天程序下实现发送图片

4、这里只写出客户端的发送代码,接收端的接收实现原理其实也是一样的,只不过多了监听TCP链接的步骤

如何在mfc制作的聊天程序下实现发送图片

5、接下来是读取文件的代码实现,文件其实也是二进制数据,只需要把数据读入内存,再通过tcp的发送接口发送给对方就可以了

如何在mfc制作的聊天程序下实现发送图片

6、接下来,我把完整的发送代码写下来,实现TCP葛激握颟发送图片的功能,代码如下:FILE*pf=NULL稆糨孝汶; SOCKETconn=INVALID_SOCKET; WSADATAwsaData; structhostent*hp; unsignedintaddr; structsockaddr_inserver; intwsaret,len; charbuffer[4096]={0}; do { wsaret=WSAStartup(0x101,&wsaData); if(wsaret) break; conn=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(conn==INVALID_SOCKET) break; addr=inet_addr("127.0.0.1"); hp=gethostbyaddr((char*)&addr,sizeof(addr),AF_INET); if(hp==NULL) { break; } server.sin_addr.s_addr=*((unsignedlong*)hp->h_addr); server.sin_family=AF_INET; server.sin_port=htons(20248); if(connect(conn,(structsockaddr*)&server,sizeof(server))) { break; } pf=fopen("d:\\123.png","rb"); if(pf==NULL) break; while(1) { len=fread(buffer,1,4096,pf); if(len<=0) break; send(conn,buffer,len,0); } }while(0); if(pf) fclose(pf); if(conn!=INVALID_SOCKET) closesocket(conn);

如何在mfc制作的聊天程序下实现发送图片

7、这里需要注意一点就是,因为TCP是可靠的字节流式发送,如果使用同一个套接字发送,即发送图片也发送文本等,需要做好TCP的分包,不然后接收端无法识别数据内容

© 一点知识