Hallo liebe Leute,
wir versuchen uns gerade an der Übergabe von Variablen. Dazu haben wir uns mit der Hilfe von g**gle einen Server und Client erstellt. Server läuft auf dem Pi und ist in C, Client auf Win7 und ist in C#.
Erstaunlicherweise hats sogar nach einigen Versuchen funktioniert und wir können darüber "chatten".
Was wir brauchen ist aber die Übergabe von Ints oder einem Int Array.
Haben schon etliches versucht auf der Serverseite das Char zu Int zu wandeln. Klappt nicht mit unseren Kenntnissen.
Haben dann versucht den Typ des Streams anzupassen. Klappt nicht mit unseren Kenntnissen
Falls sich jemand findet der mal drüberlesen kann und weiß wie das geht oder eine Idee hat wären wir sehr dankbar.
Lieben Gruß
Sebastian
"Server in C"
C
#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)
{
int serv_sock = 0,cli_sock = 0,n=0, c=0;
//serv enthält Adress Informationen vom Server
struct sockaddr_in serv;
//client bekommt die Adress Infos vom Client bei eingehender Verbindung
struct sockaddr_in client;
int clientsize;
char sendBuff[1024];
char recvBuff[1024];
//Socket mit gewünschten Parametern bilden(Domain, Type, protocol)
serv_sock = socket(AF_INET, SOCK_STREAM, 0);
if (serv_sock == -1)
perror("socket()");
puts("Scoket Abfrage erfolgreich\n");
//Adress Typ (hier:zu anderer Maschine)= socket Parameter
serv.sin_family = AF_INET;
//Ziel IP(Typ:String --> inet_addr() konvertiert zu Big Endian)
//INADDR_ANY --> horcht auf alle IP Adressen
serv.sin_addr.s_addr = htonl(INADDR_ANY);
//Port, über den Verbunden werden soll
serv.sin_port = htons(10000);
//Server starten und Socket an lokale Adresse binden
if(bind(serv_sock, (struct sockaddr*)&serv,sizeof(serv))<0)
perror("bind()");
puts("Server gestartet");
//Listen unterbricht Programmausführung bis Client kontaktiert
//5 = Anzahl möglicher Verbindungen
if(listen(serv_sock, 5) == -1)
perror("listen()");
puts("Warte auf eingehende Verbindung...\n");
clientsize = sizeof(struct sockaddr_in);
//accept holt eine Verbindung aus der Warteschleife
cli_sock = accept(serv_sock, (struct sockaddr*)&client ,(socklen_t*)&clientsize);
if (cli_sock < 0)
{
perror("accept()");
return 1;
}
printf("Verbindung hergestellt zu:\nHost:%s\nPort:%d \n",
inet_ntoa(client.sin_addr), ntohs(client.sin_port));
memset(sendBuff,0,sizeof(sendBuff));
memset(recvBuff,0,sizeof(recvBuff));
while(recvBuff[n] != '\r' )
{
n=recv(cli_sock,recvBuff,1024,0);
recvBuff[n]='\r';
if(n == -1)
perror("recv()");
//Zeit in Sekunden
sleep(1);
}
printf("%s\n",recvBuff);
printf("%d Zeichen empfangen\n",n);
while(sendBuff[c] != '\r')
{
puts("Nachricht an Client: ");
scanf("%s",&sendBuff[0]);
c=send(cli_sock,sendBuff,strlen(sendBuff),0);
sendBuff[c]='\r';
if(c == -1)
perror("send()");
//Zeit in Sekunden
sleep(1);
}
printf("%d Zeichen gesendet\n",c);
close(cli_sock);
close(serv_sock);
return 0;
}
Alles anzeigen
"Client in C#"
C#
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 Client
{
public static void Main()
{
try
{
string serverIP = "192.168.10.10";
int port = 10000,c;
System.Net.IPAddress IP = System.Net.IPAddress.Parse(serverIP);
IPEndPoint ipEp = new IPEndPoint(IP, port);
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ipEp);
if (tcpclnt.Connected)
Console.WriteLine("Verbunden zu Server: {0}", serverIP);
byte[] msgin = new byte[100];
string dataout;
Console.WriteLine("Nachricht an Server: \n");
dataout = Console.ReadLine();
NetworkStream stream = tcpclnt.GetStream();
byte[] msgout = System.Text.Encoding.ASCII.GetBytes(dataout);
stream.Write(msgout, 0, msgout.Length);
do
{
c = stream.Read(msgin, 0, 100);
for(int i = 0; i < c; i++)
Console.Write(Convert.ToChar(msgin));
}
while (msgin[c] == '\r');
tcpclnt.Close();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
}
}
}
Alles anzeigen