.NET TcpClient mit WinApi Socket ?
-
hi hab da grad ein problem:
aslo ich hab ein TCP server den cih genre in c# schreiben würde am besten mit TcpClient/TcpListener aus System.Net.Sockets-manespace, doch nun hab ich das prob. das auf dem Sytem wo ich den client drauf laufen soll kein .NET möglich ist sondern nur das normale C/C++, also hba ich das einfach mal versucht zu programmieren, aber leider kommt beim sockte immer der fehlercode 10061 beim aufruf von connect, weiss jmd zufällig wie man .NET TcpClient mit WinApi Socket zusammen verwenden kann?
Server-Code:
public partial class Form1 : Form { TcpListener listener = null; Thread t; List<TcpClient> clients = new List<TcpClient>(); public Form1() { InitializeComponent(); } void ThreadStart() { while (true) { MessageBox.Show("Waiting...."); clients.Add(listener.AcceptTcpClient()); MessageBox.Show("Connectet.... "); } } private void button1_Click(object sender, EventArgs e) { listener = new TcpListener(System.Net.IPAddress.Parse("127.0.0.1"), 44666); listener.Start(); t = new Thread(ThreadStart); t.Start(); } }
Client-Code
/* initialize windows sockets */ { WSADATA wsa; if (WSAStartup(MAKEWORD(1, 1), &wsa)) { MessageBox(0,L"WSAStartup() failed",L"FAIL",0); //printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError()); return; } } SOCKET sock; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { MessageBox(0,L"socket constructor failed",L"FAIL",0); return; } else if(sock == INVALID_SOCKET) { MessageBox(0,L"socket constructor failed(invalid socket)",L"FAIL",0); return; } else { MessageBox(0,L"socket constructor success",L"WIN",0); } { sockaddr_in* addrp = new sockaddr_in; memset(addrp,0,sizeof(SOCKADDR_IN)); addrp->sin_port = 44666; addrp->sin_family = AF_INET; addrp->sin_addr.s_addr = inet_addr("127.0.0.1"); int failOrSuc = connect(sock,(SOCKADDR*) addrp, sizeof(SOCKADDR_IN) ); if (failOrSuc == SOCKET_ERROR) { char * buffer = new char[10]; sprintf(buffer, "%d", WSAGetLastError()); MessageBox(0,L"socket connect failed",L"FAIL",0); MessageBoxA(0,buffer,"Reason",0); return; }else { MessageBox(0,L"socket connected successful",L"WIN",0); } }
-
so konnte mein prblem (glaubich) selbst lösen
, mit den hier vbeschriebenen clientcode geht es:http://msdn.microsoft.com/en-us/library/ms740632(v=VS.85).aspx