2010-12-12 52 views
0

我嘗試通過網絡發送一個字符串數據,這是我的代碼:在網絡上發送C#

IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 25); 

    TcpClient client = new TcpClient(serverEndPoint); 
    Socket socket = client.Client; 

    byte[] data = Encoding.ASCII.GetBytes(response); 

    socket.Send(data, data.Length, SocketFlags.None); 

    socket.Close(); 
    client.Close(); 

當我運行它,我得到了System.Net.Sockets.SocketException

+0

你確定這個端口上有東西在聽嗎?試圖打開一個套接字到一個不存在的服務器肯定會導致套接字異常。 – tvanfosson 2010-12-12 21:25:05

+6

我暫時低估了你,因爲你沒有提供伴隨着SocketException的消息。如果您願意,請重新測試您的應用程序,然後向我們展示'SocketException.Message'的內容以及任何InnerExceptions的Type和'Message'內容。這有助於我們診斷您的問題。 – TomTom 2010-12-12 21:26:58

回答

3

如果您正在使用無連接協議,您必須在調用Send之前調用Connect,否則Send將拋出SocketException。如果您使用的是面向連接的協議,則必須使用Connect建立遠程主機連接,或者使用Accept接受傳入連接。 參考Socket.Send Method (Byte[], Int32, SocketFlags)

假設你使用的是無連接協議的代碼應該是這樣的,

string response = "Hello"; 
IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); 

if (ipAddress != null) 
{ 
    IPEndPoint serverEndPoint = new IPEndPoint(ipAddress, 25); 
    byte[] receiveBuffer = new byte[100]; 

    try 
    { 
     using (TcpClient client = new TcpClient(serverEndPoint)) 
     { 
      using (Socket socket = client.Client) 
      { 
       socket.Connect(serverEndPoint); 

       byte[] data = Encoding.ASCII.GetBytes(response); 

       socket.Send(data, data.Length, SocketFlags.None); 

       socket.Receive(receiveBuffer); 

       Console.WriteLine(Encoding.ASCII.GetString(receiveBuffer)); 
      } 
     } 
    } 
    catch (SocketException socketException) 
    { 
     Console.WriteLine("Socket Exception : ", socketException.Message); 
     throw; 
    } 
} 

下一次,嘗試包括異常消息來解釋究竟是什麼出了問題。