Sie müssen kein Protokoll implementieren, Sie können einfach ReceiveFilter
erstellen, indem Sie die Schnittstelle implementieren: IReceiveFilter
.
Also zunächst eine benutzerdefinierte Request Klasse wie unten erstellen:
public class MyRequestInfo : IRequestInfo
{
public string Key { get; set; }
public string Unicode { get; set; }
// You can add more properties here
}
dann die ReceiveFilter schaffen - die ReceiveFilter im Grunde die Klasse, die alle eingehenden Nachrichten filtert. Dies ist erforderlich, wenn Sie kein Protokoll implementieren möchten.
public class MyReceiveFilter: IReceiveFilter<MyRequestInfo>
{
// This Method (Filter) is called whenever there is a new request from a connection/session
//- This sample method will convert the incomming Byte Array to Unicode string
public MyRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest)
{
rest = 0;
try
{
var dataUnicode = Encoding.Unicode.GetString(readBuffer, offset, length);
var deviceRequest = new MyRequestInfo { Unicode = dataUnicode };
return deviceRequest;
}
catch (Exception ex)
{
return null;
}
}
public void Reset()
{
throw new NotImplementedException();
}
public int LeftBufferSize { get; }
public IReceiveFilter<MyRequestInfo> NextReceiveFilter { get; }
public FilterState State { get; }
}
Nächster Schritt ist eine benutzerdefinierte AppSession
erstellen. Sitzung ist wie wenn ein Client eine Verbindung herstellt Der Server erstellt eine Sitzung für ihn und wird zerstört, wenn der Client die Verbindung trennt oder wenn der Server die Verbindung schließt. Dies ist für Situationen nützlich, in denen der Client eine Verbindung herstellen muss und der Server dann ACKnowledgment senden muss, damit der Client die nächste Nachricht senden kann.
public class MyAppSession : AppSession<MyAppSession, MyRequestInfo>
{
// Properties related to your session.
public int ClientKey { get; set; }
public string SomeProperty { get; set; }
}
Und der letzte Schritt ist Ihre benutzerdefinierten AppServer
kann
// Here you will be telling the AppServer to use MyAppSession as the default AppSession class and the MyRequestInfo as the defualt RequestInfo
public class MyAppServer : AppServer<MyAppSession, MyRequestInfo>
{
// Here in constructor telling to use MyReceiveFilter and MyRequestInfo
protected MyAppServer() : base(new DefaultReceiveFilterFactory<MyReceiveFilter, MyRequestInfo>())
{
NewRequestReceived += ProcessNewMessage;
}
// This method/event will fire whenever a new message is received from the client/session
// After passing through the filter
// the requestInfo will contain the Unicode string
private void ProcessNewMessage(MyAppSession session, MyRequestInfo requestinfo)
{
session.ClientKey = SessionCount;
// Here you can access the Unicode strings that where generated in the MyReceiveFilter.Filter() Method.
Console.WriteLine(requestinfo.Unicode);
// Do whatever you want
session.Send("Hello World");
session.Close();
}
}
Sie auch andere Methoden der AppServer Klasse außer Kraft zu schaffen wie: OnSessionClosed
oder OnNewSessionConnected
Das ist es - dann nur Sie haben zum Initialisieren und Starten des Servers:
var myAppServer = new MyAppServer();
if (!myAppServer.Setup(2012))
{
_logger.LogMessage(MessageType.Error, string.Format("Failed to setup server"));
return;
}
if (!myAppServer.Start())
{
_logger.LogMessage(MessageType.Error, string.Format("Failed to start server"));
return;
}
was meinst du, ohne ein Protokoll zu implementieren? Super Socket verwendet entweder TCP oder UDP, abhängig von der Konfiguration –
Nun, offensichtlich verwendet es TCP und UDP als Transport-Level-Protokoll. Aber beim Lesen der Dokumentation scheint es, dass Sie ein Kommunikationsprotokoll entwickeln müssen, um Daten zu kapseln. Wenn Sie [hier] (http://docs.supersocket.net/v1-6/en-US/The-Built-in-Command-Line-Protocol) schauen, können Sie lesen, was ich meine. Die erste Frage auf der Seite hat genau die Antwort auf Ihre Frage. Ich lese _Sie müssen Ihr Anwendungsprotokoll definieren ..._, das scheint obligatorisch. Danke. – tedebus
Möchten Sie nur die Daten als Bytes erhalten? –