首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows上的套接字-我的程序中是否遗漏了什么?

Windows上的套接字-我的程序中是否遗漏了什么?
EN

Stack Overflow用户
提问于 2012-02-11 21:46:48
回答 1查看 345关注 0票数 2

感谢您提前阅读和回答!

我写了一个简单的C#程序,它通过套接字与第三方工具连接。每当我发送超过1024个字符的字符串时,第三方软件都会抛出错误。现在,我正在尝试找出这是我的套接字代码还是其他软件(EnergyPlus)的问题。

这只是几行代码,如果有人有建议,我们将不胜感激!

代码语言:javascript
复制
using System.IO;
using System.Net;
using System.Net.Sockets;
...
private int port = 1410;
private TcpListener listener;
private Stream s;
private StreamReader sr;
private StreamWriter sw;
private Socket soc;
...

这才是真正的开始:

代码语言:javascript
复制
listener = new TcpListener(port);
listener.Start();
soc = listener.AcceptSocket();

// now, the other program connects

soc.SetSocketOption(SocketOptionLevel.Socket,
        SocketOptionName.ReceiveTimeout, 10000);

s = new NetworkStream(soc);

sr = new StreamReader(s);
sw = new StreamWriter(s);
sw.AutoFlush = true; // enable automatic flushing

sw.WriteLine("more or less than 1024 characters");

...

这是我使用的代码。我忘了什么吗?有什么我需要注意的吗?我很高兴有任何建议。

我从E+得到的错误如下:

代码语言:javascript
复制
ExternalInterface: Socket communication received error value " 1" at time = 0.00 hours.
ExternalInterface: Flag from server " 0".
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-11 22:18:18

你需要看看EnergyPlus定义的规范;任何套接字通信都需要规则。这里有两个明显的选择:

  1. 您没有遵循规则(可能长度有限,或者您可能需要为此scenario)
  2. their
  3. 编写特殊的标记字节)

没有正确实现规范(最大的原因是:缓冲区问题,或者:假设逻辑帧到达单个网络数据包)

实际上,我发现有趣的是它还在做anything,因为那里没有明显的“帧”;TCP是一个流,所以你通常需要帧来划分逻辑消息。这通常意味着以下其中之一:

对于基于文本的套接字(最终终止符),通常用于

  • (最终终止符)

你没有做这些,所以在我写的任何服务器上,这都是一条不完整的消息,直到发生了其他事情。这听起来像是基于文本的;我会尝试添加一个cr/lf/crlf

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9240699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档