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 ausWas kann ich da machen ?