2017-04-01 44 views
0

我已經安裝TCP/IPVS15 NuGet Packeges到我的項目,並引用它是作爲SimpleTCP,我已經重建項目,但對於SimpleTcpClient client;它說引用:TCP/IP客戶端和服務器使用基本和

抑制狀態錯誤CS0246類型或命名空間名稱 「SimpleTcpServer」找不到(是否缺少使用 指令或程序集引用?)

不知道有什麼可說的原因,也許我錯過了一些參考甚至使用。

客戶:

using System; 
using System.Text; 
using System.Windows.Forms; 

namespace Client 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     SimpleTcpClient client; 

     private void button1_Click(object sender, EventArgs e) 
     { 
      button1.Enabled = false; 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      client.WriteLineAndGetReplay(txtMessage.Text, TimeSpan.FromSeconds(5)); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      client = new SimpleTcpClient(); 
      client.StringEncoder = Encoding.UTF8; 
      client.DataRecevived += Client_DataReceived; 
     } 

     private void Client_DataReceived(object sender, SimpleTCP.Message e) 
     { 
      textBox1.Invoke((MethodInvoker)delegate() 
      { 
       textBox1.Text += e.MessageString; 
      }); 
     } 
    } 
} 

服務器:

using System; 
using System.Text; 
using System.Windows.Forms; 

namespace Server 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     SimpleTcpServer server; 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      server = new SimpleTcpServer(); 
      server.Delimeter = 0x13; 
      server.StringEncoder = Encoding.UTF8; 
      server.DataReceived += Server_DataReceived; 
     } 

     private void Server_DataReceived(object sender, SimpleTCP.Message e) 
     { 
      txtStatus.Invoke((MethodInvoker)delegate() 
      { 
       txtStatus.Text += e.MessageString; 
       e.ReplyLine(string.Format("You said: {0}", e.MessageString)); 
      });   
     } 

     private void btnStart_Click(object sender, EventArgs e) 
     { 
      txtStatus.Text += "Server starting..."; 
      System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(txtHost.Text)); 
      server.Start(ip, Convert.ToInt32(txtPort.Text)); 
     } 

     private void btnStop_Click(object sender, EventArgs e) 
     { 
      if (server.IsStarted) 
      { 
       server.Stop(); 
      } 
     } 
    } 
} 
+1

您的代碼在我身邊正常工作。你介意更新問題以包含完整的代碼嗎? –

+2

.NET中已經有了一個完美的'TcpListener'。不需要Nuget。只是說' – MickyD

+0

@Reousa Asteron你好,我已經在 – nikorio

回答

0

要回答你的問題,你得到這個錯誤,因爲你沒有包含在你的代碼using SimpleTCP;

您的每一個表格的開始應該是這個樣子:

using SimpleTCP; 
using System; 
using System.Net; 
using System.Windows.Forms; 

隨着中說,該代碼仍然有一些問題。

  1. 您的客戶表單中沒有client.Connect(IP, PORT);。爲了創建server < > client連接,必須有一個監聽服務器和一個客戶端來連接它。在你的情況下,只有一個監聽服務器。

  2. 在您的server表格中,您應該調用IPAddress.Parse()來代替。用例:IPAddress.Parse("127.0.0.1");

  3. 你不需要因爲你沒有使用任何類型的多線程來Invoke任何你Form成員,除非SimpleTCP默認情況下,這是不太可能這樣做。

此外,整個項目似乎是一團糟。如果您仍然開始使用,我會強烈建議您使用Console Application,因爲它們更寬容且使用起來非常簡單。

我還建議學習更多關於C# events以及它們是如何工作的。

這是server < > client項目使用SimpleTCP,您的配置和Console Application爲您開始。

服務器:

using System; 
using System.Net; 
using SimpleTCP; 
using System.Text; 

namespace server 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SimpleTcpServer server = new SimpleTcpServer(); //Instantiate server. 
      server.Delimiter = 0x13; //Config 
      server.StringEncoder = Encoding.UTF8; //Config 
      server.DataReceived += Server_DataReceived; //Subscribe to DataRecieved event. 
      IPAddress ip = IPAddress.Parse("127.0.0.1"); //IP Address using .Parse() 
      int port = 6500; //Port number 
      server.Start(ip, port); //Start listening to incoming connections and data. 
      Console.ReadKey(); //Pause the console. 
     } 

     static void Server_DataReceived(object sender, SimpleTCP.Message m) 
     { 
      Console.WriteLine(m.MessageString); //Write message to console. 
      string replyMessage = String.Format("You said {0}", m.MessageString); //This is the reply message 
      m.ReplyLine(replyMessage); //Send reply message back to client. 
     } 
    } 
} 

客戶:

using System; 
using System.Net; 
using SimpleTCP; 
using System.Text; 

namespace client 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SimpleTcpClient client = new SimpleTcpClient(); //Instantiate the client 
      client.StringEncoder = Encoding.UTF8; //Config 
      client.DataReceived += Client_DataReceived; //Subscribe to the DataRecieved event. 
      client.Connect("127.0.0.1", 6500); //Connect to the server 
      while(true) //Keep the console open until you close it. 
      { 
       //As long as the console is open, every message you type will be sent to the server. 
       client.WriteLineAndGetReply(Console.ReadLine(), TimeSpan.FromSeconds(5)); 
      } 
     } 
     static void Client_DataReceived(object sender, Message m) 
     { 
      Console.WriteLine(m.MessageString); //Write recieved reply from server to console. 
     } 
    } 
} 

我希望這可以幫助你在你的旅程,好運!

+0

讓我知道如果我錯過了什麼! –

+0

你好,你的代碼運行良好,它是我的問題的答案,但似乎,這將是好的這個答案,以避免'System.Net.Sockets.SocketException',如果服務器關閉,客戶端試圖連接,它會拋出異常 – nikorio

+0

@nikorio這種情況下有一種叫做「異常處理」的東西。我儘量保持代碼儘可能簡單,但您可以根據需要進行擴展。 請參閱https://msdn.microsoft.com/en-us/library/ms173162.aspx進行「異常處理」。有很多東西要學,只要繼續閱讀!祝你好運 :) –