Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4454[/thread]

Socket-Server, ich verstehe es nicht ganz: Perl-Server+C#-Client-> Bi-Direkt.-Verbi (Seite 2)

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
no1gizmo
 2007-02-21 12:24
#37469 #37469
User since
2007-02-20
21 Artikel
BenutzerIn
[Homepage] [default_avatar]
jungs, ich bin ne Blase!

Dabei wurde ich hier darauf hingewiesen, aber irgendwie hatte ich übersehen, dass es funktionierte. Manchmal ist man für Lösungen einfach blind.

Nun geht es!

Das schicke ich an den Server: (C#-Code)
Code: (dl )
1
2
3
4
            foreach (object socket in this.socketList)
{
((Socket)socket).send_stream("Das ist ein Test!"+'\r'+'\n');
}


Ich hatte immer nur '\n' geschickt, es muss aber wirklich \r\n am Ende sein!

DANKE! @esskar @kristian

Also es funktioniert nun, falls aber jemand eine grundsolidere variente (mit ->read?) kennt und vorstellen könnte, wäre das natürlich super.

Perl ist eigentlich auch ne geile Sprache, wenn man sich dran gewöhnt hat!\n\n

<!--EDIT|no1gizmo|1172053558-->
esskar
 2007-02-21 12:40
#37470 #37470
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
c#
Code: (dl )
1
2
3
4
foreach (Socket socket in this.socketList)
{
socket.send_stream("Das ist ein Test!\r\n");
}

(send_stream ist ja von dir, oder; wäre interessant zu wissen, wie diese funktion implementiert ist)

perl
Code: (dl )
1
2
3
4
while(defined(my $line = $client->getline))
{
print $line;
}
no1gizmo
 2007-02-21 12:52
#37471 #37471
User since
2007-02-20
21 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=esskar,21.02.2007, 11:40]c#
Code: (dl )
1
2
3
4
foreach (Socket socket in this.socketList)
{
socket.send_stream("Das ist ein Test!\r\n");
}

(send_stream ist ja von dir, oder; wäre interessant zu wissen, wie diese funktion implementiert ist)
[/code][/quote]
Jo, hier meine Socket-Klasse (noch nicht absolut fertig, wie man sieht), hier findet man auch "send_stream()":

Quote
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;

namespace TestGUI
{
class Socket
{
private bool connected = false;
TcpClient tcpClient;
NetworkStream nwStream;

string ip_adress = "";
int port;

public string IP
{
get
{
return this.ip_adress;
}
}

public int Port
{
get
{
return this.port;
}
}

public bool Connected
{
get
{
return this.connected;
}
}

public Socket()
{
tcpClient = new TcpClient();
}

public void Exit()
{
tcpClient.Close();
}


public bool connect(string ip, int port)
{
this.ip_adress = ip;
this.port = port;

try
{
tcpClient.Connect(ip, port);
Console.WriteLine("hinbekommen");
}
catch
{
Console.WriteLine("Verbindung fehlgeschlagen");
this.connected = false;
}
try
{
nwStream = tcpClient.GetStream();
this.connected = true;
}
catch
{
this.connected = false;
}

return this.connected;

}

public void disconnect()
{
this.tcpClient.Close();
this.connected = false;
}

public string get_stream()
{
string returndata = "";

if (this.connected)
{
byte[] bytes = new byte[tcpClient.ReceiveBufferSize];

try
{
nwStream.Read(bytes, 0, (int)tcpClient.ReceiveBufferSize);
}
catch
{
}
returndata = Encoding.ASCII.GetString(bytes);
}

return returndata;
}

public void send_stream(string senddata)
{
if (this.connected)
{
Byte[] sendBytes = Encoding.ASCII.GetBytes(senddata);

try
{
nwStream.Write(sendBytes, 0, sendBytes.Length);
}
catch
{

}
}
}
}
}
esskar
 2007-02-21 13:47
#37472 #37472
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hmm, wie wäre es damit; so als ansatz!

Code: (dl )
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
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace Esskar {
public class TcpSocket : Socket
{
public TcpSocket()
: base(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) { }

public void Bind(IPAddress address, int port)
{
Bind(new IPEndPoint(address, port));
}

public void Listen()
{
Listen(5);
}

public int Send(string str) {
return this.Send(str, Encoding.ASCII);
}

public int Send(string str, Encoding enc) {
byte[] sendBytes = enc.GetBytes(str);
return this.Send(sendBytes);
}
}
}
no1gizmo
 2007-02-21 17:48
#37473 #37473
User since
2007-02-20
21 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du leitest von der Socket-Klasse ab, aha, okay, warum nicht.

Aber was für eine Verbesserung soll dein Ansatz bringen?
esskar
 2007-02-21 19:08
#37474 #37474
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=no1gizmo,21.02.2007, 16:48]Aber was für eine Verbesserung soll dein Ansatz bringen?[/quote]
naja,
1. halte ich den c# style-guide ein
2. schreibst du eine Socket-klasse, die intern ein TcpClient object verwendet. TcpClient benutzt intern nochmal ein System.Net.Sockets.Socket object; also wird 2 mal gewrapped was wirklich unschön ist

so wie ich das sehe, brauchst du nämlich eher socket funktionalität als die tcpclient funktionen, die intern sowieso erstmal puffern, und selber entscheiden, wann sie senden, wenn man sie nicht flushed
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2007-02-20 14:14.