套接字编程 -- 发送和接收图像
Socket Programming -- Sending and receiving images
我希望我来对地方了。如果我的问题不在正确的部分,我深表歉意。
我正在尝试将图像从用python编写的客户端发送到用c ++编写的服务器。当我执行它们时,服务器端似乎已连接,但客户端给了我此错误(缩进错误:undent 与任何外部缩进级别都不匹配)
我将发布服务器端:
#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)
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 在 Visual C++ 中以编程方式更改按钮的背景图像
- 如何使用任何编程语言组合序列中的多个图像
- 使用 QPixmap 和 QLabel 在 Qt Creator 中以编程方式添加图像文件 (.PNG)
- 以编程方式更改图像源
- 使用CUDA从2D图像编程3D模型
- 如何使用 C 编程创建图像数据库
- 套接字编程 -- 发送和接收图像
- 如何在c中使用socket编程保存图像数据
- 适应度函数对图像比较的开放,遗传编程
- 以编程方式制作bmp图像
- 是否可以以编程方式从 JPEG 图像中删除重新启动标记