TCPClient是否可以在没有网卡的情况下使用?

詹斯

我使用TCPClientTCPListener向同一台计算机上运行的应用程序之间发送数据。我的目标是Framework 4.5,因此如果我没有记错的话,这些应用程序可以在Windows Vista SP2和更高版本上运行。我为此使用非常简单的代码:

客户:

 Try
    Using c = New Net.Sockets.TcpClient()
        c.Connect("localhost", 7643)
        If c.Connected Then

            Dim Specs As New List(Of Spectrum)
            ' Generating some data here to send

            Using stream = c.GetStream
                Dim xml As New Xml.Serialization.XmlSerializer(GetType(List(Of Spectrum)))
                xml.Serialize(stream, specs)
            End Using
        End If
    End Using
Catch sEx As Net.Sockets.SocketException
    MessageBox.Show("Could not send the data." & vbCrLf & _
                    "This can have multiple reasons:" & vbCrLf & _
                    "(i) The receiver is not running" & vbCrLf & _
                    "(ii) A firewall is blocking the connection")
Catch ex As Exception
    MessageBox.Show("An unexpected exception occured while sending the data: " & vbCrLf & _
                    ex.Message)
End Try

服务器:

Private Async Sub DoListen()
    Do
        Dim client = Await datagrabber.AcceptTcpClientAsync
        If client IsNot Nothing AndAlso client.Connected Then
            Dim t = Task.Run(Sub() HandleClient(client, Date.Now))
        End If
    Loop
End Sub

Private Sub HandleClient(client As Net.Sockets.TcpClient)
    Dim specs As New List(Of RelaxIS_Shared.CSSpectrum)
    Using stream = client.GetStream
        Dim ser As New System.Xml.Serialization.XmlSerializer(GetType(List(Of RelaxIS_Shared.CSSpectrum)))
        specs = CType(ser.Deserialize(stream), List(Of RelaxIS_Shared.CSSpectrum))
        client.Close()
    End Using

    ' Do stuff with data
End Sub

这很好用,但是我开始怀疑这是否真的是在应用程序之间发送数据的聪明方法。例如,这是否始终可以在现代Windows计算机上运行,​​或者如果所涉及的计算机没有网卡怎么办?是否以某种方式虚拟化了TCP连接以在localhost IP上工作,而不管系统中的实际硬件是什么?

我发现了很多有关多个网卡的信息,但实际上没有关于没有网卡的信息。

我已经尝试停用Windows中的所有网卡。在这种情况下,它仍然有效,但是是否总是这样?是否可以存在不允许使用TCPClient连接的硬件/软件配置?

我喜欢这个原理,因为它比起共享文件来说非常顺畅,而且不那么笨拙。我没有Windows Communication Framework之类的经验,因此坚持使用我首先知道的方法。

如果需要代码,则非常感谢C#或VB.NET中的两个答案。


一个简短的更新:基于下面usr可接受的答案,我已经使用命名管道实现了通信。它基本上是相同的代码,它的工作原理完美无缺,对于任何可能与我处于同一位置的人来说,绝对值得一看。您也不会遇到防火墙的问题,在企业PC上尤其如此。


还有一个更新:usr更加正确。命名管道很好,但值得一读的是WCF。乍一看似乎让人有些不知所措,但是在应用程序之间实现小型数据传输接口非常简单,容易。一旦启动并运行它,就能够“在另一个应用程序中调用方法”要走很多路。没有类型转换,也没有以任何方式序列化数据……这很棒,值得学习。

usr

TCP始终适用于本地连接。这些称为回送连接。您无需将以太网电缆插入计算机两次即可使其自言自语...

对于仅本地通信,命名管道是一个不错的选择。它们更简单,速度更快。.NET对它们的支持很好。

如果可能的话,放弃TCP和任何其他基于流的接口。使用更高级别的RPC机制,例如.NET远程处理(非常简单,可以在命名管道上运行)或WCF。WCF不需要托管网站项目。

基本上,任何事情都比自己编写RPC机制要好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以在没有相机的情况下使用Vuforia?

来自分类Dev

是否可以在没有 sudo 的情况下使用 docker?

来自分类Dev

是否可以在没有 Groovy 的情况下使用 Jenkins

来自分类Dev

是否可以在没有grako的情况下使用带有grako生成的解析器?

来自分类Dev

是否可以在没有ReactJS的情况下使用RelayJS和GraphQL?

来自分类Dev

是否可以在没有Node.js的情况下使用Ember.js框架?

来自分类Dev

PJSIP(PJSUA2)是否可以在没有音频设备的情况下使用?

来自分类Dev

是否可以在没有APN的情况下使用聊天服务

来自分类Dev

是否可以在没有Web界面的情况下以批处理模式使用Onedrive?

来自分类Dev

是否可以在没有重定向服务器的情况下使用OAuth 2.0?

来自分类Dev

是否可以在没有外键的情况下使用休眠

来自分类Dev

Play 2.3.x是否可以在没有激活器(和maven)的情况下使用?

来自分类Dev

Hystrix是否可以在没有Eureka / Ribbon或其他Netflix OSS模块的情况下使用

来自分类Dev

Zuul Edge Server是否可以在没有Eureka / Ribbon的情况下使用

来自分类Dev

是否可以在没有Tableau Desktop的情况下使用Tableau Server?

来自分类Dev

是否可以在没有容器的情况下使用Spring Framework DI?

来自分类Dev

是否可以在没有Swift或Objective-C的情况下使用Go创建iOS应用?

来自分类Dev

是否可以在没有IIS的情况下使用Windows集成身份验证?

来自分类Dev

是否可以在没有平方矩阵(R)的情况下使用chorddiag创建和弦图?

来自分类Dev

是否可以在没有映射模板的情况下使用AppSync和GraphQL?

来自分类Dev

是否可以在没有QApplication的情况下使用QML和QtQuick?

来自分类Dev

是否可以在没有FCM的情况下使用可编程聊天SDK?

来自分类Dev

是否可以在没有ANDROID SQLite中将AUTOINCREMENT设置为PRIMARY KEY的情况下使用

来自分类Dev

是否可以在没有war文件的情况下使用JBoss Rewrite?

来自分类Dev

是否可以在没有javaEbean的情况下使用play-authenticate?

来自分类Dev

PJSIP(PJSUA2)是否可以在没有音频设备的情况下使用?

来自分类Dev

是否可以在没有Asp.net页面的情况下使用MVC?

来自分类Dev

是否可以在没有服务器的情况下使用实体类和EntityManager?

来自分类Dev

是否可以在没有桌面的情况下安装和使用cool-retro-term?

Related 相关文章

  1. 1

    是否可以在没有相机的情况下使用Vuforia?

  2. 2

    是否可以在没有 sudo 的情况下使用 docker?

  3. 3

    是否可以在没有 Groovy 的情况下使用 Jenkins

  4. 4

    是否可以在没有grako的情况下使用带有grako生成的解析器?

  5. 5

    是否可以在没有ReactJS的情况下使用RelayJS和GraphQL?

  6. 6

    是否可以在没有Node.js的情况下使用Ember.js框架?

  7. 7

    PJSIP(PJSUA2)是否可以在没有音频设备的情况下使用?

  8. 8

    是否可以在没有APN的情况下使用聊天服务

  9. 9

    是否可以在没有Web界面的情况下以批处理模式使用Onedrive?

  10. 10

    是否可以在没有重定向服务器的情况下使用OAuth 2.0?

  11. 11

    是否可以在没有外键的情况下使用休眠

  12. 12

    Play 2.3.x是否可以在没有激活器(和maven)的情况下使用?

  13. 13

    Hystrix是否可以在没有Eureka / Ribbon或其他Netflix OSS模块的情况下使用

  14. 14

    Zuul Edge Server是否可以在没有Eureka / Ribbon的情况下使用

  15. 15

    是否可以在没有Tableau Desktop的情况下使用Tableau Server?

  16. 16

    是否可以在没有容器的情况下使用Spring Framework DI?

  17. 17

    是否可以在没有Swift或Objective-C的情况下使用Go创建iOS应用?

  18. 18

    是否可以在没有IIS的情况下使用Windows集成身份验证?

  19. 19

    是否可以在没有平方矩阵(R)的情况下使用chorddiag创建和弦图?

  20. 20

    是否可以在没有映射模板的情况下使用AppSync和GraphQL?

  21. 21

    是否可以在没有QApplication的情况下使用QML和QtQuick?

  22. 22

    是否可以在没有FCM的情况下使用可编程聊天SDK?

  23. 23

    是否可以在没有ANDROID SQLite中将AUTOINCREMENT设置为PRIMARY KEY的情况下使用

  24. 24

    是否可以在没有war文件的情况下使用JBoss Rewrite?

  25. 25

    是否可以在没有javaEbean的情况下使用play-authenticate?

  26. 26

    PJSIP(PJSUA2)是否可以在没有音频设备的情况下使用?

  27. 27

    是否可以在没有Asp.net页面的情况下使用MVC?

  28. 28

    是否可以在没有服务器的情况下使用实体类和EntityManager?

  29. 29

    是否可以在没有桌面的情况下安装和使用cool-retro-term?

热门标签

归档