各位大虾!!小弟是个新手,最近学习Socket编程,遇到了一个问题:
主要代码如下:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPHostEntry dns2 = Dns.GetHostEntry("hp-15ff12452e50");
            Console.WriteLine("现在正在连接到" + dns2.AddressList[0] + "的" + "4444号端口......");
            IPAddress add1 = IPAddress.Parse(args[0]);
            TcpListener tl = new TcpListener(add1, 4444);
            string send_data = "tarzan!";
            byte[] rec_byte = new byte[100];
            byte[] send_byte = Encoding.Default.GetBytes(send_data.ToCharArray());
            tl.Start();
            IPEndPoint host1 = new IPEndPoint(dns2.AddressList[0], 4444);
            Console.WriteLine(s.Connected);   
            s.Connect(host1);            
            Console.WriteLine(s.Connected);
            byte[] msg = Encoding.Default.GetBytes("This is a test");
            byte[] bytes = new byte[256];
            try
            {
                // Blocks until send returns.
                Console.WriteLine(Encoding.Default.GetString(msg));
                int i = s.Send(msg, msg.Length, SocketFlags.None);
                Console.WriteLine("Sent {0} bytes.", i.ToString());
                s.SendTimeout = 5000;
                // Get reply from the server.
                //if (s.Available != 0)
                //{
                s.ReceiveTimeout = 5000;
                    int byteCount = s.Receive(bytes, s.Available,
                       SocketFlags.None);
                    if (byteCount > 0)
                    {
                        Console.WriteLine(Encoding.Default.GetString(bytes));
                    }
                    s.Close();
                //}
            }
                   catch ( SocketException e ) 
                   {
                      Console.WriteLine( "{0} Error code: {1}.", e.Message, e.ErrorCode.ToString() );
                      
                   }
执行后,在命令行中报错为:
现在正在连接到10.10.0.1的4444号端口......
False
True
This is a test
Sent 14 bytes.
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond Error code: 10060.
为什么收不到数据,请指教,谢谢

解决方案 »

  1.   

    把防火墙关了, 或者在Exceptions里面, Add Ports, 添加4444端口的Exception
      

  2.   

    LeoMaya:
    我的防火墙已经关了,还是这样
      

  3.   

    LeoMaya:
    我的防火墙已经关了,包括Windows自带的防火墙,可还是这样
      

  4.   

    LeoMaya:
    telnet 10.10.0.1(or 127.0.0.1) 4444
    然后就黑屏了,我输入echo还是黑的
      

  5.   

    我在怀疑是否可以用同步把信息发送给自己。改为异步试试看
    // 这里要设定一个全局的变量,来控制进程通讯
    private static ManualResetEvent allDone = new ManualResetEvent(false);....
    public void YourMethod()
    {
    // 前面的代码不改,这里省略
    // 这里需要改
    try
                {
    allDone.Reset();
                    // Blocks until send returns.
                    Console.WriteLine(Encoding.Default.GetString(msg));
                    s.BeginSend(msg,0, msg.Length, SocketFlags.None, new AsyncCallback(SendCallback), s);
    s.BeginReceive(bytes, 0, bytes.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), s);
    // 等待执行完毕
    allDone.WaitOne();
    // 输出结果
    if (byteCount > 0)
                        {
                            Console.WriteLine(Encoding.Default.GetString(bytes));
                        }
    s.Close();
                       }
                       catch ( SocketException e ) 
                       {
                          Console.WriteLine( "{0} Error code: {1}.", e.Message, e.ErrorCode.ToString() );
                          
                       }
    }// 另外写方法结束异步
    private void SendCallback(IAsyncResult ar)
    {
    Socket s = (Socket)ar.AsyncState;
    int length = s.EndSend();
    Console.Write ("Sent {0} bytes.", length.ToString());
    }private void ReceiveCallback(IAsyncResult ar)
    {
    Socket s = (Socket)ar.AsyncState;
    int length = s.EndReceive();
    Console.Write ("Receive {0} bytes.", length.ToString());
    allDone.Set();
    }
      

  6.   

    ezhuyin:
    你的方法中new AsyncCallback(SendCallback)报错:要求对象引用.不好意思,没有分数了,不过还是希望你能帮我一下,谢谢
      

  7.   

    应该没错的。
    测试方法中调用
    s.BeginSend(msg,0, msg.Length, SocketFlags.None, new AsyncCallback(SendCallback), s);SendCallback是自定义的一个方法,已经声明了
    private void SendCallback(IAsyncResult ar)
      

  8.   

    ezhuyin:
    那我为什么报错啊??别的地方都没错