手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

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

时间:2024-10-12 05:56:32

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; SOCKET conn = INVALID_SOCKET; WSADATA wsaData; struct hostent *hp; unsigned int addr; struct sockaddr_in server; int wsaret, len; char buffer[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 = *((unsigned long*)hp->h_addr); server.sin_family = AF_INET; server.sin_port = htons(20248); if (connect(conn, (struct sockaddr*)&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的分包,不然后接收端无法识别数据内容

© 手抄报圈