2016-08-20 62 views
-1

我创建了一个计算器,它使用c#windows窗体应用程序根据给定的数字输出两个双数。如何通过同一局域网将双重类型发送到另一台计算机?

我想将这些数字输出到连接到LAN(以太网)的另一台计算机上。我试图使用套接字和WCF,但无法找到正确的方式使其工作。

IPHostEntry ipHostInfo = Dns.Resolve(DnsGetHostName()); 
IPAddress ipAddress = ipHostInfo.AddressList[0]; 
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 61); 

Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

try 
{ 
    sender.Connect(remoteEP); 

    lblInfo.Text = sender.RemoteEndPoint.ToString(); 

    byte[] azm = new byte[] {byte.Parse(Azm.ToString()) }; 
    byte[] ele = new byte[] {byte.Parse(Ele.ToString()) }; 

    sender.Shutdown(SocketShutdown.Both); 
    sender. Close(); 
} 

这是我尝试做的事情,但它没有奏效。

我希望我所要求的是可能的,非常感谢您可以提供的任何帮助。

+2

什么是 “没有工作” 是什么意思?当你运行你的程序时会发生什么?这与你想要的有什么不同? –

+0

有关将'double'值转换为'byte []'的信息,请参阅标记的副本。它实际上比你需要的更彻底,因为它显示了如何一次处理多个“double”。随意忽略'double'数组处理,并使用转换每个'double'值的部分。请注意,一旦你有一个'byte []',发送数据只是传输字节的问题,这是网络API的一个非常基本的基本操作。你不应该需要帮助,但如果你这样做,发布一个新的问题,并确保包括一个可靠地再现问题的好[mcve]。 –

+0

请注意,您当前的“转换”代码是完全错误的。假设'Azm'和'Ele'是'double'变量,那么最好的办法就是用'double'转换为'byte'。最糟糕的情况是,你的代码会在大部分时间抛出异常,因为通常'double'值的文本表示不能被解析为'byte'值。下面列出的一个答案通过以同样的方式进行,而不是提供良好的,有用的数字转换,从而增加了您的错误。 –

回答

1

你忘了实际发送数据。

byte[] azm = new byte[] {byte.Parse(Azm.ToString()) }; 
byte[] ele = new byte[] {byte.Parse(Ele.ToString()) }; 

sender.Send(azm); //<-- You forgot to call these two. 
sender.Send(ele); //<-- You forgot to call these two. 

sender.Shutdown(SocketShutdown.Both); 
sender. Close(); 

阅读来自MSDN documentation更多Socket.Send()


但请记住,一个byte只能去从0到255所以如果你打算使用较大的数字,你必须使用一个intlong代替。这也意味着端点必须读取更多字节。

byte[] azm = BitConverter.GetBytes(int.Parse(Azm.ToString())); 
byte[] ele = BitConverter.GetBytes(int.Parse(Ele.ToString())); 

如果使用int端点具有读取4个字节,如果使用long端点必须读8个字节。

倒车BitConverter.GetBytes()可以这样做:

int azm = BitConverter.ToInt32(<byte array here>, 0); 
...or... 
long azm = BitConverter.ToInt64(<byte array here>, 0); 
相关问题