Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C和x2B之间传输文件+;TCP上的客户机/C#服务器 我现在尝试通过TCP在C++客户端和C语言服务器之间发送JPEG图片流。 我使用C++的传输文件函数,但是我不知道我是否正确处理了C。 我没有得到运行时错误,但是图片没有显示,所以我想我遗漏了一些东西_C#_C++_Sockets_Tcp_Winsock2 - Fatal编程技术网

在C和x2B之间传输文件+;TCP上的客户机/C#服务器 我现在尝试通过TCP在C++客户端和C语言服务器之间发送JPEG图片流。 我使用C++的传输文件函数,但是我不知道我是否正确处理了C。 我没有得到运行时错误,但是图片没有显示,所以我想我遗漏了一些东西

在C和x2B之间传输文件+;TCP上的客户机/C#服务器 我现在尝试通过TCP在C++客户端和C语言服务器之间发送JPEG图片流。 我使用C++的传输文件函数,但是我不知道我是否正确处理了C。 我没有得到运行时错误,但是图片没有显示,所以我想我遗漏了一些东西,c#,c++,sockets,tcp,winsock2,C#,C++,Sockets,Tcp,Winsock2,编辑:更新的代码,我收到的文件大小正在执行堆栈溢出 C++代码(客户端:发送图片) C代码(服务器:接收图片并显示) while(true) { 尝试 { 使用(MemoryStream stream=新的MemoryStream(ReceiveVarData(clientSock))) { 流位置=0; Image=Image.FromStream(流); 如果(图像!=null) pictureBox1.图像=图像; } } 捕获(例外情况除外) { Console.WriteLine(例如

编辑:更新的代码,我收到的文件大小正在执行堆栈溢出

C++代码(客户端:发送图片)

C代码(服务器:接收图片并显示)

while(true)
{
尝试
{
使用(MemoryStream stream=新的MemoryStream(ReceiveVarData(clientSock)))
{
流位置=0;
Image=Image.FromStream(流);
如果(图像!=null)
pictureBox1.图像=图像;
}
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
}
}
公共静态字节[]ReceiveVarData(套接字)
{
Console.WriteLine(“接收数据…”);
整数偏移=0;
int recv;
Console.WriteLine(“接收数据大小…”);
字节[]数据大小=新字节[4];
s、 接收(数据大小);
int size=BitConverter.ToInt32(数据大小,0);
Console.WriteLine(“数据大小”+大小);
字节[]数据=新字节[大小];
while(偏移量<大小)
{
Console.WriteLine(“下载”+(偏移量/大小)*100.0+“%”;
recv=s.Receive(数据,偏移量,1024,SocketFlags.None);
如果(recv==0)
{
数据=空;
打破
}
偏移量+=recv;
}
返回数据;
}
更改:

using (Image image = Image.FromStream(new MemoryStream(ReceiveVarData(clientSock))))
{
    if (image != null)
        pictureBox1.Image = image;
}
为此:

using ( MemoryStream stream = new MemoryStream(ReceiveVarData(clientSock)) )
{
    stream.Position = 0;
    Image image = Image.FromStream(stream);
    if ( image != null )
        pictureBox1.Image = image;
}
您正在创建
图像后立即处理该对象。

当用数据缓冲区实例化
MemoryStream
时(从我记得的情况来看)将将其位置设置为流的末尾,因此您必须将
MemoryStream.position
设置回起始位置。

您读取了文件大小,但我不知道您将文件大小发送到哪里?处理MemoryStream是一个非常讨厌的错误。不幸的是,它不会经常导致异常。我已经更新了代码,在尝试读取c端的文件大小时出现stackoverflow错误…@Germain67在不发送文件大小的情况下尝试相同的操作。根据我记忆中的
TransmitFile
首先发送文件大小,然后发送文件内容。这可能是错误的,但值得一试。
using (Image image = Image.FromStream(new MemoryStream(ReceiveVarData(clientSock))))
{
    if (image != null)
        pictureBox1.Image = image;
}
using ( MemoryStream stream = new MemoryStream(ReceiveVarData(clientSock)) )
{
    stream.Position = 0;
    Image image = Image.FromStream(stream);
    if ( image != null )
        pictureBox1.Image = image;
}