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();
                }            
            }
        }
    }
    

Anmelden zum Antworten