2017-09-22 121 views
1

我需要将从套接字(TCP/IP)接收的值赋给变量,以便我可以在表单中的标签中使用它。 我在这里问,因为我一直在寻找并尝试几个小时,找不到任何东西。如何将此值赋给c#中的全局变量?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
using System.Windows.Forms; 

namespace ConsoleApp1 
{ 
class Exemys 
{ 
     static byte[] Buffer { get; set; } 
     static Socket sck; 
     [STAThread] 
     public static void Conectar(/*string[] args*/) 
     { 
      sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Parse("192.168.34.230"), 5202); 
      try 
      { 
       sck.Connect(localEndpoint); 
       Console.WriteLine("Exemys connected!\r\n"); 
      } 
      catch 
      { 
       Console.Write("Unable to connect to Exemys\r\n"); 
       Conectar(/*args*/); 
      } 
     while (true) 
     { 
      Buffer = new byte[sck.SendBufferSize]; 
      int bytesRead = sck.Receive(Buffer); 
      byte[] formatted = new byte[bytesRead]; 
      for (int i = 0; i < bytesRead; i++) 
      { 
       formatted[i] = Buffer[i]; 
      } 
      string mensaje = Encoding.ASCII.GetString(formatted); 
      Console.Write(mensaje + "\r\n"); 

     } 
    }  
} 
} 

这段代码是写在一个类中的,而Form是在其他地方写的。 我需要设置的值是mensaje,所以我可以在窗体的文本框中看到它。 对不起,我的英语,谢谢!

+0

'“表格在其他地方”' - 还有什么地方?这段代码如何与表单相关? – David

+0

@大卫抱歉,如果我表达自己很差,表单是在同一个项目。我的意思是这个代码不在Form的代码中。 – Joaco

+0

此代码暗示这是控制台应用程序的整体。是吗?表格与此有关? – David

回答

0

首先,全局变量闻起来像一个糟糕的设计。无论如何,你似乎举了一个ConsoleApplication的例子,但你可能有一个Windows窗体应用程序?很明显,你不能从控制台应用程序运行表单,所以只需将所有内容转换为Windows Forms应用程序即可。

反正你有一个表单工作后,你可能会可能会改变你的代码,以便Conectar(),我们实际上我们可以提供一个更好的名字一样ConnectAndGetMessage(),实际上返回消息。然后你从你的表单调用该方法,也许在Load处理程序中。

简单地说,你可以做这样的事情:

class Exemys { 

    public static string ConnectAndGetMessage() { 
     // Here your code! ;) 
     return mensaje; 
    } 
} 

class FormWithTextbox { 

    private void FormWithLabel_Load(object sender, System.EventArgs e) 
    { 
     Textbox1.Text = Exemys.ConnectAndGetMessage(); 
    } 
} 

请注意,这不是最好的解决方案,因为你应该注入Exemys作为依赖,而不是,反正,这将是以后的改进。

另一件需要指出的代码,但你可能会很快知道你是不是退出while循环,所以你最终可能会陷入无限循环。

+0

谢谢,我会试试这个,并告诉你这对我是否有用! 关于while循环,我是这样配置的,因为我需要不断地读取正在接收的数据,所以我找不到其他东西! – Joaco

+0

在这种情况下,您应该连接,然后尝试从Exemys类外部的while循环中获取数据,以便您能够返回所收到的内容。那么,希望有所帮助。 –

+0

对不起,我试过了你给我的代码,但是没有奏效。该值仍然不出现在文本框中。无论如何谢谢你! – Joaco