?
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 ?