Linux 圖片傳輸功能c/c++(初版)

由于深度學習任務的需要,要在程序里面嵌入一個module。

這個module 的功能是接收來自ios客戶端的圖片。并且傳送給深度學習分類器進行處理。

于是看了看各種各樣的 module 實現方案。

先是用IO函數把圖片以數組的方式存起來。

再和服務器建立連接,socket傳這個數組。

然后服務器接收完數組以后就再運用IO函數 把數組以圖片的方式存起來!

然后用各種網絡編程和操作系統的技巧,多線程接收多線程發送來改善速度。

?

現在先講述一種最原始的 圖片傳輸的module

??這是服務端進程運行

它將接收fish-bike.jpg 并且將之存到/root/photo_out這目錄下!

這是客戶端進程運行

它將發送/root/photo_in/fish-bike.jpg 給服務進程。同時在本地/root/photo_in/復制一個fish-bike.jpg(這是本地測試的demo)

?傳送成功!但是慢!

以下是客戶端代碼

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#define SERVER_IP "127.0.0.1"
#define PORT 6675int main()
{int socket_fd;socket_fd=socket(AF_INET,SOCK_STREAM,0);struct sockaddr_in server_addr;//initialize sockfd 
   memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_port=htons(PORT);//6675server_addr.sin_addr.s_addr=inet_addr(SERVER_IP);//127.0.0.1 local?memset(&(server_addr.sin_zero),0,8);//clean server addr int res =connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(server_addr));//connect server_addr
  printf("connect res is %d\n",res); /*while(1){printf("send send ---->\n");char input[100];char output[100]; memset(input,0,sizeof(input));gets(input);res=write(socket_fd,input,strlen(input));printf("the write resoult is %d\n",res);res=read(socket_fd,output,100);output[res]=0;printf("server says:'%s'\n",output);sleep(1);}*/char path[100];printf("please give the path of photo!\n");char input[100];gets(input);sprintf(path,"/root/photo_in/%s",input);printf("begin to write");write(socket_fd,input,strlen(input));printf("write %s success",input);FILE *out=fopen(path,"r");printf("read %s success",path);FILE *new=fopen("/root/photo_in/new.jpg","w");printf("open /root/photo_in/new.jpg success");int c;sleep(1);printf("ready to open!");while((c=fgetc(out))!=EOF)//open /root/photo_in/cat.jpg 
         {                        //get c of cat.jpgchar photo[100];sprintf(photo,"%d",c);//write c into photo[]int b=atoi(photo);fputc(b,new);// printf("data %s\n",photo);
write(socket_fd,photo,strlen(photo)); //write photo[]to serverusleep(1500);//sleep(?)
}char *end="#";write(socket_fd,end,strlen(end));close(socket_fd);}

以下是服務端代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h> //sockaddr_in#define PORT 6675int main()
{int socket_fd;int new_fd;         //建立套接字
     socket_fd=socket(AF_INET,SOCK_STREAM,0);// int socket(int domain, int...
                                          printf("socket_fd is %d\n",socket_fd);//初始化設置地址和端口號struct sockaddr_in server_addr; memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_port=htons(PORT);server_addr.sin_addr.s_addr=htonl(INADDR_ANY);memset(&(server_addr.sin_zero),0,8);//設置端口可重用int contain;setsockopt(socket_fd,SOL_SOCKET, SO_REUSEADDR, &contain, sizeof(int));         //綁定fd和本機地址int res=bind(socket_fd,(struct sockaddr *)&server_addr,sizeof(server_addr));printf("bind res is %d\n",res);if(res==-1)                 return -1;if(listen(socket_fd,20)==-1){printf("Failed to listen!\n");return -1;}printf("after listen\n");while(1){struct sockaddr_in client_addr;int size=sizeof(client_addr);new_fd=accept(socket_fd, (struct sockaddr *)&client_addr, &size);if(new_fd==-1){printf("wait for client to connect!\n");sleep(1);continue;}printf("A connect and the new fd is %d\n",new_fd);/*while(1){          char input[100];char output[100];res=read(new_fd,input,100);input[res]=0;printf("client says '%s'\n",input);                   gets(output);res=write(new_fd,output,strlen(output));}*///while(1)
                 {FILE *in;char input[100];res=read(new_fd,input,100);input[res]=0;char path[100];sprintf(path,"/root/photo_out/%s",input);printf("the path is %s\n",path);in=fopen(path,"w");printf("after path\n");char photo[10];while(1){memset(photo,0,10);res=read(new_fd,photo,10);if(res==0){printf("read nothing"); return 0;}photo[res]=0;int d=atoi(photo);//  printf("data %s\n",photo);fputc(d,in);}}}close(socket_fd);close(new_fd); }

?

所以接下來是不放在本地測試,而是放在騰訊云服務器上測試!

放在遠端服務器上測試沒想到套接字阻塞的現象比本地測試更加嚴重!

就是 客戶端傳4 18 3過去?

結果?服務端把4183 當做一個點的像素值寫了進去!

?

轉載于:https://www.cnblogs.com/zzzPark/p/6388868.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255412.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255412.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Val編程-val系列編程思想

利用Val語言可以編寫出各種各樣的應用程序。正如windows phone面臨的窘境一樣&#xff0c;受眾太小&#xff0c;市場不大。應用程序不多&#xff0c;所以也談不上成熟。國內的應用程序基本上就是簡單的小程序&#xff0c;談不上什么編程思想。國外許多都是基于kernel的而衍生出…

Celery的實踐指南

Celery的實踐指南celery原理&#xff1a;celery實際上是實現了一個典型的生產者-消費者模型的消息處理/任務調度統&#xff0c;消費者(worker)和生產者(client)都可以有任意個&#xff0c;他們通過消息系統&#xff08;broker&#xff09;來通信。典型的場景為&#xff1a;客戶…

【pyqt5學習】——bug修復,利用qt資源庫qrc文件進行背景圖像設置,不顯示圖像

目錄 bug描述 bug分析 bug解決 bug描述 利用下面文章的方法進行資源設置后&#xff0c;有的顯示了有的沒有顯示 【pyqt5學習】——pyqt5中.qrc資源文件的創建與編寫_有情懷的機械男的博客-CSDN博客_python qrc目錄一、說明二、安裝pyqt5以及相關工具&#xff08;pyqt5、pyuic…

Datalore:用于機器學習可視化的新Web方案!

前不久&#xff0c;JetBrains團隊發布了Datalore&#xff0c;這是一款基于云的web應用程序&#xff0c;用于構建機器學習模型并在Python中創建豐富的可視化。最新的測試版本旨在簡化構建機器學習模型的流程&#xff0c;并幫助開發人員進行數據分析。由于Datalore的智能編碼輔助…

Val3語言介紹

Val3語言是一門專門針對特定工業機器人的一門語言。在墻內有關這方面的介紹非常的少。在墻外維基百科上有一篇詳細介紹的,有空FQ摘抄在這里。 Val3是使用XML格式。可以使用XML編輯器來進行編寫VAL3的程序&#xff0c;可直接在模擬器上或者示教盒上編程&#xff0c;一般推薦使用…

網絡層相關問題

1.說一下網絡層的總體結構。 2.有沒有看過源碼&#xff1f; A.繼承Request   B.打日志   C.修改參數 3.說一下Volley整體結構。 4.有了解過OkHttp嗎&#xff1f; 5.說一下OkHttp和Volley的區別&#xff1f;轉載于:https://www.cnblogs.com/jarvisyin/p/6389553.html

CSS魔法堂:重拾Border之——圖片作邊框

前言 當CSS3推出border-radius屬性時我們是那么欣喜若狂啊&#xff0c;一想到終于不用再添加額外元素來模擬圓角了&#xff0c;但發現border-radius還分水平半徑和垂直半徑&#xff0c;然后又發現border-top-left/right-radius的水平半徑之和大于元素寬度時&#xff0c;實際值會…

共享內存簡介和mmap 函數

一、共享內存簡介 共享內存區是最快的IPC形式&#xff0c;這些進程間數據傳遞不再涉及到內核&#xff0c;換句話說是進程不再通過執行進入內核的系統調用來傳遞彼此的數據。 即每個進程地址空間都有一個共享存儲器的映射區&#xff0c;當這塊區域都映射到相同的真正的物理地址空…

【pyqt5學習】——QToolTip,QLabel控件,伙伴關系

目錄 0、學習資源 1、給控件設置提示信息——QToolTip 2、QLabel控件&#xff08;顯示圖像、設置超鏈接、信號綁定&#xff09; 3、QLabel伙伴關系 1&#xff09;代碼 2&#xff09;效果 3&#xff09;知識點addWidget 0、學習資源 PyQt5教程&#xff0c;來自網易云課堂…

Hello IT

從高中的計算機課開始學習如何按下開機鍵&#xff0c;如何上網&#xff0c;如何背誦五筆字根&#xff0c;再到大學中如何使用office,利用C編碼做算法&#xff0c;到現在IT中的偽一員&#xff0c;時間算起來也不短&#xff0c;然正在入門是在2010年8月杭州參加嵌入式培訓&#x…

ARM指令集2

ARM指令集2 ARM微處理器支持加載/存儲指令用于在寄存器和存儲器之間傳送數據&#xff0c;加載指令用于將存儲器中的數據傳送到寄存器&#xff0c;存儲指令則完成相反的操作。 LDR指令&#xff08;與MOV有區別&#xff0c;MOV只能操作通用寄存器&#xff09; LDR指令格式為&…

SylixOS中select原理及使用分析

2019獨角獸企業重金招聘Python工程師標準>>> 1. select接口簡介 1.1 select接口使用用例 select是操作系統多路I/O復用技術實現的方式之一。 多路I/O復用技術大致使用場景為&#xff1a;構造一張感興趣的文件描述符列表&#xff0c;然后調用多路復用的IO接口&#x…

【pyqt5學習】——QLineEdit學習(回顯模式)

目錄 1、回顯模式 2、成果顯示 3、知識點 1&#xff09;FormLayout布局添加addRow方法 2&#xff09;在輸入框顯示灰色提示字體&#xff0c;輸入內容時消失setPlaceholderText 3&#xff09;設置回顯模式setEchoMode 4、完整代碼 1、回顯模式 QLineEdit控件的主要功能是輸…

有關機械手臂控制中的兩個重要輸入參數

1.在機械手臂中有兩個重要參數。一個是編碼器的值&#xff0c;另外一個是馬達的電流值。根據這兩個可以獲得機械手臂的運動學&#xff0c;動力學的一些數據。第一重要特征參數 是DH參數&#xff0c;另外一個就是每個軸的質心參數。

MySQL的權限分配

MySQL 賦予用戶權限命令的簡單格式可概括為&#xff1a;grant 權限 on 數據庫對象 to 用戶&#xff0c;如 GRANT PRIVILEGES ON datebase.* to user% IDENTIFIED by passwd;一、給表數據賦權 grant 普通數據用戶&#xff0c;查詢、插入、更新、刪除 數據庫中所有表數據的權利。…

用HttpURLConnection發送http請求

//發送http請求try {//1.使用網址構造一個URL對象 URL url new URL(path);//2.獲取連接對象 HttpURLConnection conn (HttpURLConnection) url.openConnection();//3.設置一些屬性 //設置請求方式&#xff0c;注意大寫conn.setRequestMethod("GET");//設置請求超時…

【pyqt5學習】——QLineEdit控件輸入校驗器Validator、掩碼setInputMask限制輸入、textChanged信號

目錄 1、輸入校驗器——限制輸入框輸入的內容 1&#xff09;校驗器類型——整數、浮點數、數字字母結合&#xff08;正則&#xff09; 2&#xff09;步驟 3&#xff09;結果 ?編輯 ?編輯 4&#xff09;完整代碼 2、利用掩碼進行輸入的限制 0&#xff09;掩碼對照表 1…

Call requires API level 3 (current min is 1)

結果出現“Call requires API level 3 (current min is 1): 解決方法&#xff1a; 在工程上點擊右鍵 -> Android Tools -> Clear Lint Markers&#xff0c;即可。轉載于:https://www.cnblogs.com/qianyukun/p/5458331.html

Product文本格式說明

使用txt進行產品信息的說明。 Product文本格式說明 //**************************************************** //產品信息 //固定標識符全部大寫&#xff0c;全部在等號&#xff08;&#xff09;前面 //****************************************************** PRODUCTTest //…

PyOpenCL圖像處理:Box模糊

為什么80%的碼農都做不了架構師&#xff1f;>>> # -*- coding: utf-8 -*-from __future__ import absolute_import, print_function import numpy as np import pyopencl as cl import cv2 from PIL import Imagedef RoundUp(groupSize, globalSize): r globalSi…