python - Socket编程--发送和接收图像

标签 python c++ sockets opencv

希望我来对地方了。 如果我的问题不在正确的部分,我深表歉意。

我正在尝试将图像从用 python 编写的客户端发送到用 c++ 编写的服务器。 当我同时执行它们时,服务器端似乎已连接但客户端给了我这个错误(IndentationError:unindent 不匹配任何外部缩进级别)

我要在服务器端发布:

#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <string>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

#define SERVER_PORT htons(50007)

int main() {

    char buffer[1024];
    int n;

    int serverSock=socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = SERVER_PORT;
    serverAddr.sin_addr.s_addr = INADDR_ANY;

    /* bind (this socket, local address, address length)
       bind server socket (serverSock) to server address (serverAddr).  
       Necessary so that server can use a specific port */ 
    bind(serverSock, (struct sockaddr*)&serverAddr, sizeof(struct sockaddr));


    // wait for a client
    /* listen (this socket, request queue length) */
    listen(serverSock,1);

    sockaddr_in clientAddr;
    socklen_t sin_size=sizeof(struct sockaddr_in);

    int clientSock=accept(serverSock,(struct sockaddr*)&clientAddr, &sin_size);

    while (1 == 1) {
            bzero(buffer, 1024);

        //char *buff = (char*)malloc(sizeof(char) * (240*360));    
        FILE *output;    
        output = fopen("test.jpg", "wb");    
        unsigned int readBytes = 0;    
        while(true)    
        {    
            int ret = recv(clientSock, buffer+readBytes, (240*360)-readBytes, 0);    
            if (ret <= 0)    
            {    
                break;    
            }    
                readBytes += ret;    
        }    
        fwrite(buffer, sizeof(char), readBytes, output);    
        fclose( output );    

        //Mat img_2 = imread( "test.jpg");

            //receive a message from a client
            n = read(clientSock, buffer, 500);
            cout << "Confirmation code  " << n << endl;
            cout << "Server received:  " << buffer << endl;

            strcpy(buffer, "test");
            n = write(clientSock, buffer, strlen(buffer));
            cout << "Confirmation code  " << n << endl;
    }
    return 0;
    close(serverSock);
}

这是客户端:

我希望有人能帮助我。

import socket
import sys,os
import cv2
import numpy as np
import time

HOST, PORT = "localhost", 50007

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client_socket.connect((HOST, PORT))


fpath ='/Users/salemalqahtani/Desktop/NetworkingPart/sss.png'
pic = open(fpath, 'rb')
chunk = pic.read(1024)
client_socket.send(str.encode("STORE " + filePath))
t = time()
while chunk:
    print("Sending Picture")
   client_socket.send(chunk)
   chunk = pic.read(1024)
pic.close()
print("Done sending")
print("Elapsed time = " + str(time() - t) + 's')
client_socket.close()
return "Done sending"

编辑: 图像从客户端发送到服务器端,服务器将回复收到的消息....

最佳答案

会不会是简单的缩进错误?打印前好像还有多余的空格

while chunk:
   print("Sending Picture")
   client_socket.send(chunk)
   chunk = pic.read(1024)

关于python - Socket编程--发送和接收图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35000632/

相关文章:

python - 霍夫曼树中的唯一标识符节点

c++ - 我应该使用哪些库来操作 C++ 中的文件?

sockets - 从 docker 容器中打开 DGRAM 套接字失败(权限被拒绝)

java - 复制二进制文件会将换行符更改为窗口标准..? java

python - SQLAlchemy 从两个具有空 LEFT JOIN 的表中选择返回空结果

Python numpy 索引多维数组

c++ - 无法获得 AllocConsole 的 STD 句柄

c++ - 当客户端关闭连接时 send() 不报告 ENOTCONN (AS400)

python - 如何在每次循环调用时更新 Python 函数参数?

c# - 选择构建服务器