C# 如何通过同一局域网向另一台计算机发送双面打印?
我使用c#windows窗体应用程序创建了一个计算器,它根据给定的数字输出两个双精度数字 我想将这些数字输出到另一台连接到LAN(以太网)的计算机上。我曾尝试使用套接字和WCF,但找不到合适的方法使其工作C# 如何通过同一局域网向另一台计算机发送双面打印?,c#,sockets,tcp,lan,data-transfer,C#,Sockets,Tcp,Lan,Data Transfer,我使用c#windows窗体应用程序创建了一个计算器,它根据给定的数字输出两个双精度数字 我想将这些数字输出到另一台连接到LAN(以太网)的计算机上。我曾尝试使用套接字和WCF,但找不到合适的方法使其工作 IPHostEntry ipHostInfo = Dns.Resolve(DnsGetHostName()); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint remoteEP = new IPEndPoint(ipAdd
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();
}
这是我试图做的东西,但没有成功
我希望我所要求的是可能的,非常感谢您提供的任何帮助。您忘记实际发送数据了
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();
如果使用int
端点必须读取4个字节,如果使用long
端点必须读取8个字节
可以像这样进行反转:
int azm = BitConverter.ToInt32(<byte array here>, 0);
...or...
long azm = BitConverter.ToInt64(<byte array here>, 0);
int-azm=BitConverter.ToInt32(,0);
或
long azm=位转换器.ToInt64(,0);
什么是“不起作用”?运行程序时会发生什么情况?这与您想要的有何不同?有关将double
值转换为byte[]
的信息,请参阅标记的副本。它实际上比您需要的更彻底,因为它显示了如何一次处理多个double
。您可以随意忽略double
数组处理,只需使用转换每个double
值的部分即可。请注意,一旦有了字节[]
,发送数据就只需传输字节,这是网络API的一项非常基本的操作。在这方面你不需要帮助,但是如果你需要,发布一个新的问题,并确保包含一个可靠地再现问题的好问题。请注意,你当前的“转换”代码是完全错误的。假设Azm
和Ele
都是double
变量,那么你所做的充其量就是从double
到byte
进行艰难的转换。最糟糕的情况是,您的代码大部分时间都会抛出异常,因为通常情况下,double
值的文本表示不能解析为字节
值。下面发布的一个答案以同样的方式进行,而不是提供良好、有用的数字转换,从而加剧了您的错误。
int azm = BitConverter.ToInt32(<byte array here>, 0);
...or...
long azm = BitConverter.ToInt64(<byte array here>, 0);