当前位置: 首页 > news >正文

山东省网站建设_网站建设公司_版式布局_seo优化

网站定位 怎么做,做网站推销手表,重庆公司注册地址提供,wordpress文章自动采集本文实例为大家分享了C实现json形式的Socket传输图片的具体代码#xff0c;供大家参考#xff0c;具体内容如下大致流程#xff1a;客户端读取图片#xff0c;经过Base64编码#xff0c;转成字符串的形式#xff0c;保存到json中#xff0c;通过socket传到服务端#x…本文实例为大家分享了C实现json形式的Socket传输图片的具体代码供大家参考具体内容如下大致流程客户端读取图片经过Base64编码转成字符串的形式保存到json中通过socket传到服务端然后Base64解码再转换成图片一.服务端1.main.cpp#include #include #include Base64_1.h#include #include json1.hpp#pragma comment(lib,ws2_32.lib)using json nlohmann::json;char revData[3888888];bool WritePhotoFile(std::basic_string strFileName, std::string strData){HANDLE hFile;hFile CreateFile(strFileName.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile INVALID_HANDLE_VALUE){return false;}CBase64 base64;int datalen(0);DWORD dwritelen(0);std::string strdcode base64.Decode(strData.data(), strData.size(), datalen);if (!WriteFile(hFile, strdcode.data(), datalen, dwritelen, NULL)){CloseHandle(hFile);return false;}CloseHandle(hFile);return true;}int main(int argc, char* argv[]){//初始化WSAWORD sockVersion MAKEWORD(2, 2);WSADATA wsaData;if (WSAStartup(sockVersion, wsaData) ! 0){return 0;}//创建套接字SOCKET slisten socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (slisten INVALID_SOCKET){printf(socket error !);return 0;}//绑定IP和端口sockaddr_in sin;sin.sin_family AF_INET;sin.sin_port htons(8888);sin.sin_addr.S_un.S_addr INADDR_ANY;if (bind(slisten, (LPSOCKADDR)sin, sizeof(sin)) SOCKET_ERROR){printf(bind error !);}//开始监听if (listen(slisten, 5) SOCKET_ERROR){printf(listen error !);return 0;}//循环接收数据SOCKET sClient;sockaddr_in remoteAddr;int nAddrlen sizeof(remoteAddr);//revData (char*)malloc(sizeof(char) * 1000000);int i 1;while (true){printf(等待连接...\n);sClient accept(slisten, (SOCKADDR *)remoteAddr, nAddrlen);if (sClient INVALID_SOCKET){printf(accept error !);continue;}printf(接受到一个连接%s \r\n, inet_ntoa(remoteAddr.sin_addr));//接收数据int ret recv(sClient, revData, 3888888, 0);if (ret 0){revData[ret] 0x00;json o json::parse(revData);for (json::iterator it o.begin(); it ! o.end(); it) {//std::cout it.key() : it.value() \n;if (it.key() imgA|| it.key() imgB){std::string num std::to_string(i);std::string strFileName D:\\ num .jpg;std::string val it.value();WritePhotoFile(strFileName, val);}}//std::cout json::parse(revData) std::endl;//printf(revData);}//发送数据//const char * sendData 你好TCP客户端\n;//send(sClient, sendData, strlen(sendData), 0);closesocket(sClient);}closesocket(slisten);WSACleanup();return 0;}2.Base64.cpp#includeBase64_1.hCBase64::CBase64(){}CBase64::~CBase64(){}std::string CBase64::Encode(const char* Data, int DataByte){//编码表const char EncodeTable[] ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/;//返回值std::string strEncode;unsigned char Tmp[4] { 0 };int LineLength 0;for (int i 0; i{Tmp[1] *Data;Tmp[2] *Data;Tmp[3] *Data;strEncode EncodeTable[Tmp[1] 2];strEncode EncodeTable[((Tmp[1] 4) | (Tmp[2] 4)) 0x3F];strEncode EncodeTable[((Tmp[2] 2) | (Tmp[3] 6)) 0x3F];strEncode EncodeTable[Tmp[3] 0x3F];if (LineLength 4, LineLength 76) { strEncode \r\n; LineLength 0; }}//对剩余数据进行编码int Mod DataByte % 3;if (Mod 1){Tmp[1] *Data;strEncode EncodeTable[(Tmp[1] 0xFC) 2];strEncode EncodeTable[((Tmp[1] 0x03) 4)];strEncode ;}else if (Mod 2){Tmp[1] *Data;Tmp[2] *Data;strEncode EncodeTable[(Tmp[1] 0xFC) 2];strEncode EncodeTable[((Tmp[1] 0x03) 4) | ((Tmp[2] 0xF0) 4)];strEncode EncodeTable[((Tmp[2] 0x0F) 2)];strEncode ;}return strEncode;}std::string CBase64::Decode(const char* Data, int DataByte, int OutByte){//解码表const char DecodeTable[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,62, // 0, 0, 0,63, // /52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // 0-90, 0, 0, 0, 0, 0, 0,0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // A-Z0, 0, 0, 0, 0, 0,26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // a-z};//返回值std::string strDecode;int nValue;int i 0;while (i DataByte){if (*Data ! \r *Data ! \n){nValue DecodeTable[*Data] 18;nValue DecodeTable[*Data] 12;strDecode (nValue 0x00FF0000) 16;OutByte;if (*Data ! ){nValue DecodeTable[*Data] 6;strDecode (nValue 0x0000FF00) 8;OutByte;if (*Data ! ){nValue DecodeTable[*Data];strDecode nValue 0x000000FF;OutByte;}}i 4;}else// 回车换行,跳过{Data;i;}}return strDecode;}3.Base64_1.h//Base64.h#pragma once#include class CBase64{public:public:CBase64();~CBase64();/*编码DataByte[in]输入的数据长度,以字节为单位*/std::string Encode(const char* Data, int DataByte);/*解码DataByte[in]输入的数据长度,以字节为单位OutByte[out]输出的数据长度,以字节为单位,请不要通过返回值计算输出数据的长度*/std::string Decode(const char* Data, int DataByte, int OutByte);};4.json.hpp 去网上下载吧个人感觉比jsoncpp好用一些(我里面的json1.hpp就是json.hpp)二.客户端1.main.cpp#include#include#include#include#include #include #include Bash64.h#include json1.hppusing namespace std;using json nlohmann::json;#pragma comment(lib, ws2_32.lib)char chBuf1[3888888], chBuf2[3888888];int main(){FILE *fIn1, *fIn2;int nRead1, nRead2;WORD sockVersion MAKEWORD(2, 2);WSADATA data;if (WSAStartup(sockVersion, data) ! 0){return 0;}std::string num std::to_string(1);std::string chFileIn1 E:\\num.jpg;num std::to_string(2);std::string chFileIn2 E:\\ num .jpg;SOCKET sclient socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sclient INVALID_SOCKET){printf(invalid socket!);return 0;}sockaddr_in serAddr;serAddr.sin_family AF_INET;serAddr.sin_port htons(8888);serAddr.sin_addr.S_un.S_addr inet_addr(192.168.3.72);if (connect(sclient, (sockaddr *)serAddr, sizeof(serAddr)) SOCKET_ERROR){ //连接失败printf(connect error !);closesocket(sclient);return 0;}char chFileIn3[100], chFileIn4[100];strcpy(chFileIn3, chFileIn1.c_str());strcpy(chFileIn4, chFileIn2.c_str());fIn1 fopen(chFileIn3, rb);fIn2 fopen(chFileIn4, rb);if (fIn1 NULL || fIn2 NULL){printf(打开读取文件失败);return 0;}//读文件json data1;//fread()读取成功返回值为实际读回的数据个数(单位为Byte)nRead1 fread(chBuf1, sizeof(char), 3888888, fIn1);nRead2 fread(chBuf2, sizeof(char), 3888888, fIn2);//base64编码 封装进jsonstring imgBase64_1 base64_encode(chBuf1, nRead1);string imgBase64_2 base64_encode(chBuf2, nRead2);data1[imgA] imgBase64_1;data1[imgB] imgBase64_2;fclose(fIn1);fclose(fIn2);//显式转换为stringstd::string s data1.dump();const char * sendData;sendData s.c_str(); //string转const char*//char * sendData 你好TCP服务端我是客户端\n;send(sclient, sendData, strlen(sendData), 0);//send()用来将数据由指定的socket传给对方主机//int send(int s, const void * msg, int len, unsigned int flags)//s为已建立好连接的socketmsg指向数据内容len则为数据长度参数flags一般设0//成功则返回实际传送出去的字符数失败返回-1错误原因存于errorchar recData[266680];int ret recv(sclient, recData, 266680, 0);if (ret0) {recData[ret] 0x00;//printf(recData);}closesocket(sclient);WSACleanup();system(pause);return 0;}2.Bash64.h#ifndef __BASE64_H__#define __BASE64_H__#include #include static const std::string base64_chars ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/;static inline bool is_base64(const char c){return (isalnum(c) || (c ) || (c /));}std::string base64_encode(const char * bytes_to_encode, unsigned int in_len){std::string ret;int i 0;int j 0;unsigned char char_array_3[3];unsigned char char_array_4[4];while (in_len--){char_array_3[i] *(bytes_to_encode);if (i 3){char_array_4[0] (char_array_3[0] 0xfc) 2;char_array_4[1] ((char_array_3[0] 0x03) 4) ((char_array_3[1] 0xf0) 4);char_array_4[2] ((char_array_3[1] 0x0f) 2) ((char_array_3[2] 0xc0) 6);char_array_4[3] char_array_3[2] 0x3f;for (i 0; (i 4); i){ret base64_chars[char_array_4[i]];}i 0;}}if (i){for (j i; j 3; j){char_array_3[j] \0;}char_array_4[0] (char_array_3[0] 0xfc) 2;char_array_4[1] ((char_array_3[0] 0x03) 4) ((char_array_3[1] 0xf0) 4);char_array_4[2] ((char_array_3[1] 0x0f) 2) ((char_array_3[2] 0xc0) 6);char_array_4[3] char_array_3[2] 0x3f;for (j 0; (j i 1); j){ret base64_chars[char_array_4[j]];}while ((i 3)){ret ;}}return ret;}std::string base64_decode(std::string const encoded_string){int in_len (int)encoded_string.size();int i 0;int j 0;int in_ 0;unsigned char char_array_4[4], char_array_3[3];std::string ret;while (in_len-- (encoded_string[in_] ! ) is_base64(encoded_string[in_])) {char_array_4[i] encoded_string[in_]; in_;if (i 4) {for (i 0; i 4; i)char_array_4[i] base64_chars.find(char_array_4[i]);char_array_3[0] (char_array_4[0] 2) ((char_array_4[1] 0x30) 4);char_array_3[1] ((char_array_4[1] 0xf) 4) ((char_array_4[2] 0x3c) 2);char_array_3[2] ((char_array_4[2] 0x3) 6) char_array_4[3];for (i 0; (i 3); i)ret char_array_3[i];i 0;}}if (i) {for (j i; j 4; j)char_array_4[j] 0;for (j 0; j 4; j)char_array_4[j] base64_chars.find(char_array_4[j]);char_array_3[0] (char_array_4[0] 2) ((char_array_4[1] 0x30) 4);char_array_3[1] ((char_array_4[1] 0xf) 4) ((char_array_4[2] 0x3c) 2);char_array_3[2] ((char_array_4[2] 0x3) 6) char_array_4[3];for (j 0; (j i - 1); j) ret char_array_3[j];}return ret;}#endif3.json.hpp  上面有链接(我里面的json1.hpp就是json.hpp)Hit:服务端和客户端的Base64文件不一样是因为当时服务端接收json时Base64解码成图片出现了问题又去找大神的博客把服务端的Base64文件换了。然后能进行正常的传输图片客户端就懒得换了~以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持脚本之家。
http://www.ihoyoo.com/news/79285.html

相关文章:

  • 网站建设 公众号橙色网站logo 配色
  • wap网站软件郑州高端定制网站
  • 做1688网站到哪里找图片网站建设企业 熊账号
  • 企业网站定制多少钱网站开发设计招聘
  • 自己做的网页怎么上传网站wordpress10款音乐插件
  • 建手机网站济宁专业网站建设
  • 网站制作公司兴田德润实力强wordpress 显示空白
  • 网站seo关键词布局公司注册网址怎么注册
  • 怎么做网站注册名密码门户网站建设单位资质要求
  • 政务网站建设情况汇报网站制作方案包含哪些内容
  • wordpress移动到回收站时发生错误.品牌内容包括哪些
  • 企业网站一定要从建立网站开始南京 seo 价格
  • 网站备案 核验单网上注册公司在哪办
  • 芜湖市建设路小学网站外贸网站怎么做优化
  • 做外贸仿牌网站百度云
  • asp网站显示建设中网站所有二级目录
  • 中国建设企业协会网站首页WordPress上传ssl证书
  • 建设和住房保障部 网站myfriv wordpress
  • 怎么用php源代码做网站wordpress 还是织梦
  • 网站页面术语wordpress模板字体修改
  • 重庆建设招标造价信息网站成都人社app
  • 网站开发费用如何记账骨干专业群建设任务书网站
  • 个人网站可以做淘宝店铺名365房产网
  • 百度竞价推广联系方式seo包括网站建设吗
  • 长春火车站什么时候解封杭州建设网站哪家好
  • 做网站有什么好书籍个人博客 wordpress
  • html5 手机网站 教程wordpress最好用的虚拟主机
  • 企业手机网站建设公司wordpress 公众号主题
  • 网站开发主要技术有哪些做婚礼电子请柬的网站
  • 赛车pk10计划网站建设怎么做校园表白网站