2010-12-12 63 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; 
    } 
} 

下一次,尝试包括异常消息来解释究竟是什么出了问题。