C# 使用TCP套接字获取损坏的jpg文件

C# 使用TCP套接字获取损坏的jpg文件,c#,sockets,tcp,C#,Sockets,Tcp,我使用C#,我使用一个异步TCP套接字连接到服务器,目的是服务器每秒向我发送5个映像文件 我学习了一个关于如何进行套接字连接的教程,所以我认为问题出在ReadCallBack函数上。有些JPG很好,但另一些格式windows无法打开,我不明白为什么 编辑:在阅读了不同的帖子并寻找更多信息后,我完全改变了制作方法,最终工作正常。如果有人遇到同样的情况,我是这样做的: StateObject state = (StateObject)ar.AsyncState; Socket handler = s

我使用C#,我使用一个异步TCP套接字连接到服务器,目的是服务器每秒向我发送5个映像文件

我学习了一个关于如何进行套接字连接的教程,所以我认为问题出在ReadCallBack函数上。有些JPG很好,但另一些格式windows无法打开,我不明白为什么

编辑:在阅读了不同的帖子并寻找更多信息后,我完全改变了制作方法,最终工作正常。如果有人遇到同样的情况,我是这样做的:

StateObject state = (StateObject)ar.AsyncState;
Socket handler = state.workSocket;

int cont = 0;

//i'm not sure why i was receiving a "\" character cathing file name, but this will control that
while (state.buffer[cont] != 0x0a && cont < StateObject.BufferSize)
    cont++;

string inc_file_name = System.Text.Encoding.ASCII.GetString(state.buffer, 0, cont);

FileStream Fs = new FileStream(inc_file_name, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);

int read_cont;
byte [] read_buffer = new byte [1024];

//till end of incoming file
while ((read_cont = handler.Receive(read_buffer)) > 0)
    Fs.Write(read_buffer, 0, read_cont);

//save file
Fs.Close();
StateObject状态=(StateObject)ar.AsyncState;
套接字处理程序=state.workSocket;
int cont=0;
//我不知道为什么我会收到一个“\”字符的cathing文件名,但这将控制它
while(state.buffer[cont]!=0x0a&&cont0)
Fs.Write(读缓冲区,0,读控制);
//保存文件
Fs.Close();
我希望它能帮助你。
感谢您的评论和帮助。

与零比较循环有什么进展?为什么需要这样做?您是否试图找出接收到的数据的终点?您的代码似乎假定缓冲区已满。你不应该把过去的读物传给handler.Receive吗?另外:它似乎假设读===写(对于数据包);这种情况很少发生。它还假设您没有重用缓冲区等-这意味着零测试非常不可靠。代码已更新。现在它可以正常工作了,您必须使用Receive func检查零循环。