【问题标题】:How to send data between .NET 4.5 and .NET 4.0 with Sockets?如何使用套接字在 .NET 4.5 和 .NET 4.0 之间发送数据?
【发布时间】:2012-05-08 02:10:07
【问题描述】:

问题是我的服务器是用旧框架编写的,所以我不能在那里使用 SocketStream,我使用 System.Net.Sockets.TcpClient 代替。 Client 是在新框架中编写的,不支持 TcpClient 和整个 System.Net.Sockets。在新框架中,我们有 Windows.Networking.Sockets。确切的问题是:如何将数据从客户端发送到服务器?

当用户点击发送按钮时会发生以下情况:

var writer = new DataWriter(socket.OutputStream);
writer.WriteString(message);
var ret = await writer.StoreAsync();
writer.DetachStream();
LogMessage(string.Format("Sent (to {0}) {1}", socket.Information.RemoteHostName.DisplayName, message));

在服务器端:

srReceiver = new System.IO.StreamReader(tcpClient.GetStream());
strResponse = srReceiver.ReadLine();

【问题讨论】:

标签: c# .net sockets client-server windows-runtime


【解决方案1】:

套接字只允许双向字节流。这与 API 无关:Win32 API 可以非常愉快地与 POSIX 套接字进行互操作(考虑在 Windows 上浏览由在 Linux 上运行的 Apache 提供的内容)。

更多内容由客户端和服务器商定(消息编码等)。

即。建立连接(使用不同的API),然后以通用格式发送数据,它将被接收。

【讨论】:

  • 我知道,但是当我尝试上面的代码时,这对我来说是合乎逻辑的,但它不起作用。我无法将数据从客户端发送到服务器。我尝试了 No-Metro Client,一切正常。
  • 客户端message的内容是什么:ReadLine会等待换行。我还会使用 SysInternal 的 TCP View 来检查数据是否已发送。否则:你做了什么调试(请更新问题)。
  • 对于消息变量,我只传递一个从文本字段中获取的字符串。我已经制作了两个 gui,并且我用代码正确连接了控件,所以我的期望是在服务器文本块中看到客户端的消息。我还看到了从 Wireshark 客户端发送到服务器的包。
  • ReadLine 一直读到下一个换行符;您是否在传递给WriteString 的字符串中包含一个?
  • 好的。我尝试使用 +"\r\n" 并且效果很好。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2012-05-08
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2013-09-14
相关资源
最近更新 更多