代码之家  ›  专栏  ›  技术社区  ›  Ahmet Altun

socket通信问题

  •  1
  • Ahmet Altun  · 技术社区  · 16 年前

    我在VS.NET中有两个独立的socket项目。其中一个是发送者,另一个是接收者。启动接收器后,我从发送器发送数据。虽然send方法在成功传输时返回13个字节,但接收器接收到0(零)。接收方接受发送方套接字并侦听它。但无法接收数据。为什么?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Mark Wilkins    16 年前

    我认为问题是发送应用程序在接收器读取数据之前就结束了。如果你放一个 Thread.Sleep(1000); Send 调用时,接收应用程序将读取数据(至少在我测试它时是这样)。

        2
  •  0
  •   jcoder    16 年前

    很可能这是代码中的一个bug,但是如果没有看到代码就无法判断。

        3
  •  0
  •   Ahmet Altun    16 年前

    非常感谢您的关注。 代码如下:

    /***********************************接收器**********************/

    班级计划 { 静态void Main(字符串[]args) 接收开始();
    }

    public class Receiver
    {
        public void Start()
        {
            Socket gateSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            gateSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8999));
            gateSocket.Listen(12);
    
            Thread thGateListen = new Thread(new ParameterizedThreadStart(GateListener));
            thGateListen.Start(gateSocket);
        }
    
        public void GateListener(object obj)
        {
    
            Socket gateSocket = (Socket)obj;
    
            for (; ; )
            {
                Socket newRequest = gateSocket.Accept();
                Console.WriteLine("New Connection Request");
                Thread thReadData = new Thread(new ParameterizedThreadStart(ReadFromSocket));
                thReadData.Start(newRequest);
            }
        }
    
    
        public void ReadFromSocket(object obj)
        {
            Socket s = (Socket)obj;
            for (; ; )
            {
                if (s.Available > 0)
                {
                    byte[] buffer = new byte[s.Available];
                    s.Receive(buffer);
                    Console.WriteLine(System.Text.Encoding.ASCII.GetString(buffer));
                }
            }
        }
    
    }
    

    班级计划 静态void Main(字符串[]args) { Sender s=新Sender(); s、 发送(“Hello Socket!”);

    class Sender
    {
        public void Send(string s)
        {
            Socket sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sendSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8999));
    
            sendSocket.Send(System.Text.Encoding.ASCII.GetBytes(s));
        }
    
    }