【问题标题】:Socket is not receiving data from localhost套接字未从本地主机接收数据
【发布时间】:2016-06-29 15:04:40
【问题描述】:

我有连接到 localhost ip 地址 127.0.0.1 和端口号的 c# 代码。 5939. 连接正常,但没有接收任何数据。我希望它接收数据并将其保存到本地机器上的文本文件中。

它没有接收数据是因为它在本地主机上和同一台机器上还是我的代码有错误..

这是我的代码..

         byte[] data = new byte[1024];
         string input, stringData;
         String ip = "127.0.0.1";
         Int32 port = 5939;
         string path = "D://ipdata.text";

            if (File.Exists("D://ipsettings.txt"))
            {
                File.Delete("D://ipsettings.txt");
            }


            IPAddress ipad = IPAddress.Parse(ip);
            IPEndPoint ipend = new IPEndPoint(ipad, port);
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                sock.Connect(ipend);

            }
            catch (Exception ex)
            {
                throw ex;
            }
            try
            {
                int recv = sock.Receive(data);
                stringData = Encoding.ASCII.GetString(data, 0, recv);
                while (true)
                {

                    input = "Client here";
                    sock.Send(Encoding.ASCII.GetBytes(input));
                    data = new byte[1024];
                    recv = sock.Receive(data);
                    stringData = Encoding.ASCII.GetString(data, 0, recv);

                    string df = "";
                    try
                    {
                        System.IO.FileInfo fi = new System.IO.FileInfo(path);

我的程序在这一行之后没有执行..

int recv = sock.Receive(data);

请帮助我摆脱这种情况。 提前致谢。

【问题讨论】:

  • 您的服务器是在连接启动后立即发送数据(从您的代码开始)还是需要向其发送一些命令?
  • 还为套接字添加超时,这样它就不会无限期地等待。
  • @bansi 我不知道先生,因为这是我自己机器的本地主机..
  • 接收是块调用,会等待数据。您可以使用异步的 Socket.BeginReceive 或 ReceiveAsync。正如 Bansi 也提到的,您如何将数据发送到该端点进行测试?
  • server 我的意思是你正在连接的应用程序。

标签: c# sockets tcp tcplistener


【解决方案1】:

除非接收函数给你,否则你需要读取数据。

使用while循环判断data是否可用。

        int recv=0;
        byte[] data = new byte[1024];

        StringBuilder sb= new StringBuilder();
        while ((recv=sock.Receive(data)) > 0)
        {
            sb.Append(Encoding.ASCII.GetString(data, 0, recv));
        }

【讨论】:

  • 先生,我已经在我的代码中做到了这一点。请参阅我更新的帖子。
  • @Adi:您在读取数据后正在使用 while 循环。但是除非数据可用,否则您需要使用 while 来确定直到。请检查我的答案并告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多