NetworkStream截断我的数据?(NetworkStream truncates my data?)
在同一台电脑上,我有2个控制台应用程序。 (客户端发送文件到服务器)
在我开始之前,我只想提一下,我正在使用这2个
async
函数:从
NetworkStream
读取:public static Task<int> ReadAsync1(this NetworkStream networkStream, byte[] buffer, int offset, int size) { return Task<int>.Factory.FromAsync(networkStream.BeginRead, networkStream.EndRead, buffer, offset, buffer.Length, networkStream); }
为了写入
NetworkStream
:public static Task WriteAsync1(this NetworkStream networkStream, byte[] buffer, int offset, int size) { return Task.Factory.FromAsync(networkStream.BeginWrite, networkStream.EndWrite, buffer, offset, buffer.Length, networkStream); }
我的客户代码 :
(让我们拿一个简单的文件,我知道它的大小)
我的代码发送:
NetworkStream ns = socketForServer.GetStream(); ns.WriteAsync1(File.ReadAllBytes(@"c:\r\1.jpg"), 0, 1593899); ns.Flush();
我的服务器代码 :(阅读...)
byte[] d = new byte[1593899]; networkStream.Read(d, 0, d.Length); File.WriteAllBytes(@"c:\r\2.jpg",d);
结果:
2.jpg
写的是:那么问题在哪里?
2.jpg
已损坏! 当我尝试打开图像时,我看到:(而不是像
1.jpg
一样的图像)所以我去看看“十六进制”出了什么问题:
我发现一段时间后 - 它写成零:
题
我究竟做错了什么 ? 我该如何修复代码才能发送整个文件?
On the same computer I have 2 console applications. (client sends a file to server)
Before I start I just want to mention that i'm using those 2
async
functions :For reading from
NetworkStream
:public static Task<int> ReadAsync1(this NetworkStream networkStream, byte[] buffer, int offset, int size) { return Task<int>.Factory.FromAsync(networkStream.BeginRead, networkStream.EndRead, buffer, offset, buffer.Length, networkStream); }
For writing to
NetworkStream
:public static Task WriteAsync1(this NetworkStream networkStream, byte[] buffer, int offset, int size) { return Task.Factory.FromAsync(networkStream.BeginWrite, networkStream.EndWrite, buffer, offset, buffer.Length, networkStream); }
My client code :
(let's take a simple file which I know it's size)
My code for sending:
NetworkStream ns = socketForServer.GetStream(); ns.WriteAsync1(File.ReadAllBytes(@"c:\r\1.jpg"), 0, 1593899); ns.Flush();
My Server code : (reading...)
byte[] d = new byte[1593899]; networkStream.Read(d, 0, d.Length); File.WriteAllBytes(@"c:\r\2.jpg",d);
Result :
2.jpg
is written :So where is the problem ?
2.jpg
is corrupted ! When I try to open the image I see this :(instead of a the same image as
1.jpg
)So I went to see the "HEX" for what is wrong :
I found out that after a while -all it writes are zeros :
Question
What am I doing wrong ? And how can I fix the code so it will send the whole file ?
原文:https://stackoverflow.com/questions/27630028
最满意答案
如果
randomFunction()
是static
:class CAnotherClass { public: static void randomFunction(); };
然后, 可以使用以下语法在不创建
CAnotherClass
对象的情况下调用randomFunction()
:CAnotherClass::randomFunction();
如果
randomFunction()
不是static
:class CAnotherClass { public: void randomFunction(); };
然后,
randomFunction()
没有创建CAnotherClass
对象,则无法调用randomFunction()
,然后必须使用以下语法:CAnotherClass myInstance; myInstance.randomFunction();
要么:
CAnotherClass().randomFunction(); // temporary object creation
请注意,如果
randomFunction()
是static
,则上述两种语法也可以使用。PS:我试着猜测没有源代码的问题是什么....希望这会有所帮助!
If you have
randomFunction()
beingstatic
:class CAnotherClass { public: static void randomFunction(); };
Then,
randomFunction()
can be called without aCAnotherClass
object being created, using this syntax:CAnotherClass::randomFunction();
If you have
randomFunction()
not beingstatic
:class CAnotherClass { public: void randomFunction(); };
Then,
randomFunction()
cannot be called without aCAnotherClass
object being created, you then have to use this syntax:CAnotherClass myInstance; myInstance.randomFunction();
or:
CAnotherClass().randomFunction(); // temporary object creation
Note that, if
randomFunction()
isstatic
, the two syntaxes above will also work.PS: I tried to guess what the problem was without the source code....hope this will help!
相关问答
更多-
C ++错误C2065:'Value':未声明的标识符-Newbe(C++ error C2065: 'Value' : undeclared identifier -Newbe)[2023-01-02]
GetValue被声明为全局而不是count类的成员。 用count ::前面的GetValue声明 int count::GetValue(){return Value;} //Accessor to get value by another class GetValue is being declared as a global not a member of the count class. Preface the GetValue declaration with count:: int coun ... -
您忘记了您的destroyPointer()方法的类标识符。 尝试 void BaseClassWithPointer::destroyPointer() 代替 You forgot the Class identifier for your destroyPointer() method. Try void BaseClassWithPointer::destroyPointer() instead
-
你错过了命名空间: settings_.push_back(std::static_pointer_cast
(selectedSheet_)); // ^^^^^ You're missing the namespace: settings_.push_back(std::static_pointer_cast (selectedSheet_)); // ^^^^^ ... -
错误C2065:'i':在C [迭代]中迭代时未声明的标识符(error C2065: 'i' : undeclared identifier when iterating in C [duplicate])[2022-03-12]
Visual Studio 2010仅支持C89,而不支持C99。 在C89中,必须在块的开头声明变量,如下所示: void foo(void) { int i; for (i = 0; i < gamesToPlay; i++) { //do something } } Visual Studio 2010 only supports C89, not C99. In C89, a variable must be declared in the beg ... -
错误C2065:'ID_MUTATE_GROUP':未声明的标识符(error C2065: 'ID_MUTATE_GROUP' : undeclared identifier)[2021-12-07]
resource.h未包含在源文件中。 resource.h is not included into your source file. -
错误C2065:未声明的标识符,即使声明函数[关闭](error C2065: undeclared identifier, even when the function is declared [closed])[2023-05-30]
如果randomFunction() 是 static : class CAnotherClass { public: static void randomFunction(); }; 然后, 可以使用以下语法在不创建CAnotherClass对象的情况下调用randomFunction() : CAnotherClass::randomFunction(); 如果randomFunction() 不是 static : class CAnotherClass { public: voi ... -
错误C2065:在另一个头文件中使用变量时未声明的标识(error C2065: Undeclared identifer when using variable in another header file)[2023-11-30]
您的设置存在多个问题。 首先,如果事情真的像你说的那样,你就不会从你的代码中得到这个错误。 您的代码,您发布它的方式,是完全可编译的,并且那里没有“未声明的标识符”问题。 您实际收到此错误的原因是循环包含您的头文件。 直接或间接地,您设法将status.h包含到anotherfile.h中,同时将anotherfile.h到status.h 。 圆形标题包含永远不会有效 即使您使用全局数组解决了主要问题,您仍然必须摆脱循环标头包含,因为它将在以后以其他方式使用它的头部。 其次,如果您需要一个真正的全局数组, ... -
您需要using namespace std::tr1::placeholders或using std::tr1::placeholders::_1 。 You need using namespace std::tr1::placeholders or using std::tr1::placeholders::_1.
-
CmdAritmetice在名称空间Calculator::UI中定义,而CmdAritmetice在名称空间Calculator::UI中定义。 因此,您必须在Calculator命名空间UI::CmdAritmetice CmdAritmetice称为UI::CmdAritmetice 。 至于无法找到Suma错误,你还没有发布Suma的定义,因此很难说出那里发生了什么,但检查以确保在某些嵌套命名空间中也没有定义。 编辑: CmdAritmetice的定义是 template我认为你是从包含ui的类的方法创建线程(它可能是指向Ui::TheWidgetYouDesignedInQtDesigner的指针)。 另一方面,线程运行的功能不在类中,因此无法到达ui 。 我建议将ui作为参数传递,或者更好的是,只传递QLineEdit : // ... std::thread reset(autowyl_potwierdzenie_reset, ui-> Autowyl_textPotwierdzenie); // ... void autowyl_potwierdzenie_res ...
相关文章
更多- data-config
- (二)solr data import
- 《Big Data Glossary》笔记
- Spring Data Solr教程(翻译)
- 使用Solr Data Import的delta-import功能
- TMF大数据分析指南 Unleashing Business Value in Big Data(一)
- Solr4:配置Data Import,从数据库直接创建索引
- Spring Data: a new perspective of data operations
- The Log: What every software engineer should know about real-time data's unifying abstraction
- 《数据结构与STL》(Data Structures and the Standard Template Library)扫描版[PDF]
最新问答
更多- 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
- 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
- OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
- 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
- codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
- 在计算机拍照在哪里进入
- 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
- No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
- 单页应用程序:页面重新加载(Single Page Application: page reload)
- 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
- System.StackOverflow错误(System.StackOverflow error)
- KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
- 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
- android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
- TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
- 企业安全培训的各项内容
- 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
- C#类名中允许哪些字符?(What characters are allowed in C# class name?)
- NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
- 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
- 将多个行和可变行移动到列(moving multiple and variable rows to columns)
- 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
- 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
- Angular $资源不会改变方法(Angular $resource doesn't change method)
- 在Angular 5中不是一个函数(is not a function in Angular 5)
- 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
- 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
- 常见的python rpc和cli接口(Common python rpc and cli interface)
- Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
- 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)