• 为什么TCP网络(接收数据)。net / C#试图接收时抛出一个异常?

  • 本文关于 c#,.net,套接口sockets,tcp
  • CodeGo.net > 为什么TCP网络(接收数据)。net / C#试图接收时抛出一个异常?
  •  

    为什么TCP网络(接收数据)。net / C#试图接收时抛出一个异常?



    c# .net 套接口sockets tcp
    我一直在与套接字在C#中发送数据和它的工作,有了这个代码:
    string ipAddress = "x.y.z.a"; // replace with a real IP address
    int port = 2809;
    string data = "foo";
    Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    if (!clientSocket.Connected)
     clientSocket.Connect(IPAddress.Parse(ipAddress), port);
    clientSocket.Send(Encoding.UTF8.GetBytes(data));
    clientSocket.Disconnect(true);
    clientSocket.Close();
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
    现在,我希望它接收数据,但我不能让我把它添加到工作socket.Receive()程序崩溃。任何人都可以向正确的方向?
    本文地址 :CodeGo.net/1106193/
    -------------------------------------------------------------------------------------------------------------------------
    1.正如乔恩是在暗示,这不是很清楚,你正在尝试添加的接收代码。你的例子中的最后一行(s)是一个位在您先关闭套接字,然后创建一个新的。为什么呢?类似的,“如果(clientSocket.Connected!)”的东西优先;如果你创建一个新的套接字,应该没有任何需要检查是否已连接。当然,它不是 CodeGo.net,你只是创建它! :-) 无论如何,如果我这样你以后只需要添加代码:
    byte[] receiveBuffer = new byte[1024];
    clientSocket.Receive(receiveBuffer);
    
    ...并改变ipAddressport因此,在一个已知的良好的服务,我收到了SocketException有说“来发送或接收数据的请求不被允许套接字没有连接并且(数据报发送一个sendto调用时)没有提供地址”。 不过,如果我插入接收代码,以便发送/接收看起来像这样:
    int bytesSent = clientSocket.Send(Encoding.UTF8.GetBytes(data));
    var receiveBuffer = new byte[1024];
    var sb = new StringBuilder();
    int receivedBytes;
    while ((receivedBytes = clientSocket.Receive(receiveBuffer)) != 0)
    {
     // NOTE: this presumes that the data coming from the remote end is ASCII-
     // encoded, which might not be the case at all. Don't copy this approach
     // blindly without thinking
     string s = Encoding.ASCII.GetString(receiveBuffer, 0, receivedBytes);
     sb.Append(s);
    }
    var response = sb.ToString(); // at this point you should have all the data that
            // has been received from the remote, so far.
    clientSocket.Disconnect(true);
    clientSocket.Close();
    
    此代码是响应我的要求(约3 KB增入在我的情况)。
     在一个更哲学/结构水平,我绝对建议虽然,如果你不真的需要深入到sockets的水平(无论何种原因)的Web客户端端的更高层的类之一是一种选择(作品所有> 1.1版本的,例如几乎所有版本的今天)。 HttpClient的是另外一个,如果你是在。NET 4.5(有备份端口也可从NuGet的。
     当然,这种盲目的,你想要做的是执行HTTP请求(其中,它的出现,是这些天)。也有其他的替代品一样的FtpWebRequest为FTP,等等等等。
     根据我的经验(工作作为一个位超过10年),它实际上是非常有往下走深达到sockets的水平,尤其是最近给出了怎样的场景多在BCL(基类库的支持,如微软)或NuGet的提供了。NET的标准组件。例如现有的客户端有花了相当多的就可以了,钉出臭虫,怪癖等其他人的巨大,巨大的优势,这样你就可以开始你真的想要去解决问题,而不是固定的有错误实际上已经修正了许多,许多......前
     (当然,也有异常,但我觉得这绝对是拇指一般规则。)
    本文标题 :为什么TCP网络(接收数据)。net / C#试图接收时抛出一个异常?
    本文地址 :CodeGo.net/1106193/
    1. 看下字符搜索的代码
    2. ASP.NET按钮事件触发时后退按钮按下
    3. 如何设定DATAGRID的列名,用WINFORM?
    4. 如何解析和替换不正确出世纪的日期值在一个大的csv文件
    5. 又现datagrid问题
    6. 动态库注入失败在某些机器上?
    7. 代码(组件控件)安全问题,集思广益
    8. 如何将内存文件上传到Amazon S3吗? C#
    9. 为什么子窗体不能显示
    10. 当连接AC#asp.net web应用程序与C ++DLL在服务器或客户端端上运行的dll的代码?

     
    

    Copyright © 2017 CodeGo.net
    http://codego.net/xinwen/ 足球比分网 足球比分 医药招商网 邵阳县新闻