2010-10-31 80 views
1

我必须在我的C#.NET 4.0应用程序中发送/接收对象(由我制作的自定义类),我希望有一个很好的教程让我开始,因为我在Google上搜索过在序列化/反序列化方面似乎存在很多问题,虽然问题解决了,但还是有很多丑陋的黑客。通过tcpclient发送/接收对象

问候, 亚历Badescu

+0

你跟一个非托管的应用程序通信或者两个端点由您管理和控制?如果后者是这种情况,您可能需要考虑WCF(可能使用TCP/IP绑定) – 2010-10-31 14:29:33

+0

注意:在SO上习惯性地忽略'hello'和'regards'。只是问问题:) – 2010-10-31 15:34:14

+0

@ohadsc两个端点都由我管理@tykhyy我将它们留在将来:D – Alex 2010-10-31 16:12:53

回答

2

我做了一个运输,不只是这一点:

http://fadd.codeplex.com/SourceControl/changeset/view/58859#1054822

图书馆是正在进行的工作,但BinaryTransport工作。它也会尝试重新连接,如果它断开连接。

例子:

我做了一个新的框架

public class Example 
{ 
    private BinaryTransport<Packet> _client; 
    private ServerExample _server; 

    public void Run() 
    { 
     // start server 
     _server = new ServerExample(); 
     _server.Start(new IPEndPoint(IPAddress.Loopback, 1234)); 

     // start client 
     _client = new BinaryTransport<Packet>(new IPEndPoint(IPAddress.Loopback, 1234)); 

     // send stuff from client to server 
     _client.Send("Hello world!"); 

     // send custom object 
     _client.Send(new User { FirstName = "Jonas", LastName = "Gauffin" }); 
    } 
} 


public class ServerExample 
{ 
    private readonly List<BinaryTransport<Packet>> _clients = new List<BinaryTransport<Packet>>(); 
    private SimpleServer _server; 

    private void OnClientAccepted(Socket socket) 
    { 
     var client = new BinaryTransport<Packet>(socket); 
     client.Disconnected += OnDisconnected; 
     client.ObjectReceived += OnObject; 

     _clients.Add(client); 
    } 

    private void OnDisconnected(object sender, EventArgs e) 
    { 
     var transport = (BinaryTransport<Packet>) sender; 
     transport.Disconnected -= OnDisconnected; 
     transport.ObjectReceived -= OnObject; 
    } 

    private void OnObject(object sender, ObjectEventArgs<Packet> e) 
    { 
     Console.WriteLine("We received: " + e.Object.Value); 
    } 

    public void Start(IPEndPoint listenAddress) 
    { 
     _server = new SimpleServer(listenAddress, OnClientAccepted); 
     _server.Start(5); 
    } 
} 

[Serializable] 
public class Packet 
{ 
    public object Value { get; set; } 
} 

[Serializable] 
public class User 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

更新:http://blog.gauffin.org/2012/05/griffin-networking-a-somewhat-performant-networking-library-for-net/

+0

嗨,我引用了你 – 2010-10-31 16:49:39

+0

我看到了,谢谢=)BinaryTransport是库中的另一个类,不过。 – jgauffin 2010-10-31 16:57:08