0

I appreciate any comment on what is the problem with this code. I use it to receiving some information from some clients. The problem is that sometimes after receiving information it crashes with this error: "An existing connection was forcibly closed by the remote host".

        public void StartReceiving()
    {
        IPEndPoint ipep = new IPEndPoint(IPAddress.Any,m_listeningPort);
        socketToListen = new Socket(ipep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

        socketToListen.Bind(ipep);
        socketToListen.Listen(10);
        socketToListen.BeginAccept(new AsyncCallback(LocalAcceptCallback),socketToListen);
    }
    private void LocalAcceptCallback(IAsyncResult iar)
    {
        socketToListen = (Socket)iar.AsyncState;
        Socket clientConnected = socketToListen.EndAccept(iar);

        ReceiveFromClient(clientConnected);
    }
    private void ReceiveFromClient(Socket s)
    {
        int total = 0;
        int recv;
        byte[] datasize = new byte[4];
        recv = s.Receive(datasize, 0, 4, 0);
        int size = BitConverter.ToInt32(datasize, 0);
        int dataleft = size;
        byte[] data = new byte[size];
        while (total < size)
        {
            recv = s.Receive(data, total, dataleft, 0);
            if (recv == 0)
            {
                break;
            }
            total += recv;
            dataleft -= recv;
        }
        receiveCallback(data);
        socketToListen.BeginAccept(new AsyncCallback(LocalAcceptCallback), socketToListen);
    }
sonya kochooloo
  • 114
  • 1
  • 5

0 Answers0