Problem bei Datenaustausch Server C Client C#
-
Hallo zusammen,
ich habe ein Problem beim Datenaustausch zwischen einem Server in C geschrieben und einem Client in C# geschrieben. Zuerst einmal soll der Server nur empfangen, der Client nur senden. Der Client kann allerdings nicht in den Stream schreiben, beim Server entsteht ein Fehler beim verbinden (accept: Bad file descriptor).
Ich habe lediglich Grundlagen in C und C# erlernt und möchte mich ein wenig in die Netzwerkprogrammierung einarbeiten. Nun möchte ich erstmal nur einen kurzen Text versenden können, was schon nicht funktioniert.
Ausschnitt aus dem C Code(Server):#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> int main(void) { //s=socket int s = 0,conn = 0,n=0; //serv enthält Adress Informationen vom Server (Typ:sockaddr_in) struct sockaddr_in serv; //client bekommt die Adress Infos vom Client bei eingehender Verbindung struct sockaddr_in client; socklen_t clientsize; char sendBuff[1025]; char recvBuff[1025]; //Socket mit gewünschten Parametern bilden(Domain, Type, protocol) s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) perror("socket()"); else printf("Scoket Abfrage erfolgreich\n"); memset(&serv, 0, sizeof(serv)); memset(sendBuff, 0, sizeof(sendBuff)); memset(recvBuff, 0, sizeof(recvBuff)); serv.sin_family = AF_INET; serv.sin_addr.s_addr = htonl(INADDR_ANY); serv.sin_port = htons(10000); bind(s, (struct sockaddr*)&serv,sizeof(serv)); if(listen(s, 1) < 0) { perror("listen()"); return -1; } else printf("Warte auf eingehende Verbindung...\n"); while(1) { clientsize = sizeof(client); conn = accept(s, (struct sockaddr*)&client ,&clientsize); if (conn < 0) perror("accept()"); else if(conn > 0) printf("Verbindung hergestellt\n"); n = recv(s,recvBuff,sizeof(recvBuff)-1,0); if(n < 0) printf("Fehler beim empfangen\n"); else printf("%s",recvBuff); //Zeit in Sekunden sleep(1); } close(s); exit(0); }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Net.Sockets; namespace Client { public class TCPClient { public static void Main() { string serverIP = "192.168.10.10"; int port = 10000; System.Net.IPAddress IP = System.Net.IPAddress.Parse(serverIP); IPEndPoint ipEp = new IPEndPoint(IP, port); //Erstellen des Clients TcpClient client = new TcpClient(); client.Connect(ipEp); if (client.Connected) Console.WriteLine("Verbunden zu Server"); //Stream erstellen NetworkStream stream = client.GetStream(); while (true) { if (stream.CanWrite) { byte[] msgout = Encoding.UTF8.GetBytes("Hallo Server"); stream.Write(msgout, 0, msgout.Length); } else Console.WriteLine("Schreiben nicht möglich");//Diese Fehlermeldung erscheint immer aber wieso???? stream.Flush(); System.Threading.Thread.Sleep(1000); stream.Close(); } } } }