Socket Problem



  • Ich habe einen Server mit winapi geschrieben der so aussieht (teile)

    while(rc!=SOCKET_ERROR)
    {
       rc=recv(connectedSocket,buf,256,0);
    
       if(rc==0 || rc==SOCKET_ERROR)
          break;
    
       buf[rc]='\0';
    
       if(!strcmp(buf, "/test"))
          test();
    }
    

    Die test() Methode :

    void test()
    {
    	printf("test start...\n");
    	int i = send(connectedSocket,(const char*)"test",sizeof("test"),0);
    
    	if (i == SOCKET_ERROR)
            printf("send() failed with error: %d\n", WSAGetLastError());
    }
    

    Meinen Client hab ich mit C# geschrieben

    void connect()
            {
                if (textBoxIP.Text == "" || textBoxPort.Text == "")
                {
                    MessageBox.Show("IP Address and Port Number are required to connect to the Server\n");
                    return;
                }
                try
                {
                    m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    IPAddress ip = IPAddress.Parse(textBoxIP.Text);
                    int iPortNo = System.Convert.ToInt16(textBoxPort.Text);
                    IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);
                    m_clientSocket.Connect(ipEnd);
                    if (m_clientSocket.Connected)
                    {
                        WaitForData();
                    }
                }
                catch (SocketException se)
                {
                    string str;
                    str = "\nConnection failed, is the server running?\n" + se.Message;
                    MessageBox.Show(str);
                }
            }
    
            public void WaitForData()
            {
                try
                {
                    if (m_pfnCallBack == null)
                    {
                        m_pfnCallBack = new AsyncCallback(OnDataReceived);
                    }
                    SocketPacket theSocPkt = new SocketPacket();
                    theSocPkt.thisSocket = m_clientSocket;
    
                    m_result = m_clientSocket.BeginReceive(theSocPkt.dataBuffer,
                                                            0, theSocPkt.dataBuffer.Length,
                                                            SocketFlags.None,
                                                            m_pfnCallBack,
                                                            theSocPkt);
                    MessageBox.Show("" + theSocPkt.dataBuffer); 
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message);
                }
    
            }
    
            public class SocketPacket
            {
                public System.Net.Sockets.Socket thisSocket;
                public byte[] dataBuffer = new byte[1024];
            }
    
            public void OnDataReceived(IAsyncResult asyn)
            {
                try
                {
                    SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
                    int iRx = theSockId.thisSocket.EndReceive(asyn);
                    char[] chars = new char[iRx + 1];
                    System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
                    int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
                    System.String szData = new System.String(chars);
                    MessageBox.Show("" + szData);
                    WaitForData();
                }
                catch (ObjectDisposedException)
                {
                    System.Diagnostics.Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n");
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message);
                }
            }
    

    Ein Button den ich erstellt habe macht sendMessage("/test")

    void sendMessage(String message)
            {
                try
                {
                    byte[] byData = System.Text.Encoding.ASCII.GetBytes(message);
                    if(m_clientSocket != null){
                        m_clientSocket.Send (byData);
                    }
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message);
                }
            }
    

    Ergebnis : "/test" kommt an ohne Problem
    Problem : der Server (mit winapi geschrieben sehe oben) gibt die Fehlermeldung 10083 aus

    Was kann ich da machen ?


Anmelden zum Antworten