Bin ein wenig verwirrt was das Verhalten meiner Programme angeht. Vielleicht zur Infrastruktur:
In Unity3d läuft ein normales C# Skript auf einer Windows Plattform. Dieses soll über TCP mit einem Unix-Rechner Daten austauschen. Zur zeit stehe ich an einer Stelle, wo nur Daten von Windows zu dem Unix rechnen gesendet werden sollen:
Nun verwirrt mich folgendes:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| TcpClient c = new TcpClient("entfernt",entfernt); Stream writer = c.GetStream(); byte[] b = new byte[255]; b[0] = 66; writer.Write(b, 0, b.Length); |
Bei diesem Code läuft alles super, Unix-Server antowrtet mit
"B mit 20 Bytes" (Paket von 20 Bytes wurde empfangen, Inhalt B)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| TcpClient c = new TcpClient("entfernt",entfernt); Stream writer = c.GetStream(); byte[] b = new byte[255]; b[0] = 66; b[1] = 66; <- writer.Write(b, 0, b.Length); |
Hier geht es nun schief:
" mit 0 Bytes" Es wird nunmehr kein Paket, oder nur ein leeres Paket empfangen.
Der Unix Server wurde in C/C++ geschrieben:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| int main(int argc, char* argv[]) {
char buffer[20];
int listenFD = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in saddr; saddr.sin_family = AF_INET; saddr.sin_port = htons(USEPORT); saddr.sin_addr.s_addr = htons(INADDR_ANY);
if(bind(listenFD, (struct sockaddr*) &saddr, sizeof(saddr))<0) printf("Error while Binding\n");
// Warte auf Clients if(listen(listenFD,10)<0) printf("Error while Listening\n"); printf("Listening aktiviert\n");
struct sockaddr_in simClient, evalClient, temp; int simFD, evalFD, tempFD; socklen_t len = sizeof(temp);
tempFD = accept(listenFD, (struct sockaddr*) &temp, &len); printf("Client hat sich gemeldet\n");
int num = recv(tempFD, buffer, sizeof(buffer), 0); printf("%s mit %d Bytes\n",buffer,num);
} |
Weiterhin funktionieren die vorgeschlagenen Arten zur Senden von Strings, Quelle
msdn.microsoft.com/d...ibrary/bb979208.aspx ebenfalls nicht. Verhalten ist hier wie die zweite gepostete C# Variante.
Quelltext
1: 2: 3:
| Byte[] sendBytes = Encoding.ASCII.GetBytes ( time + "\r\n" ); // Sende die Bytes zum Client outStream.Write ( sendBytes, 0, sendBytes.Length ); |
Nach Stunden wilden Rumprobierens schätze ich dass ich nun Hilfe brauche. Ich kann mir das Verhalten so nicht erklären.
Danke