के बीच अंतर जहां तक मुझे पता है कि मैं टीसीपी लिस्टर और सॉकेट दोनों का उपयोग कर एक सर्वर बना सकता हूं, तो उनमें से दोनों के बीच क्या अंतर है?टीसीपी श्रोता और सॉकेट
सॉकेट
private Socket MainSock;
MainSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
MainSock.Bind(new IPEndPoint(IPAddress.Any, port));
MainSock.Listen(500);
MainSock.BeginAccept(AcceptConnections, new Wrapper());
TCPListener
Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
TcpListener server = new TcpListener(localAddr, port);
server.Start();
मैं वास्तव में संदेह में हूँ। उनमें से दो कनेक्शन के लिए सुनो, तो उनके बीच क्या अंतर है?
अपडेट किया गया कोड
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.IO;
public class Wrapper
{
public byte[] buffer;
public SslStream sslStream;
public object connector;
}
public class Sock
{
private Dictionary<string, byte> Connections;
public event Action<Wrapper> AnnounceNewConnection;
public event Action<Wrapper> AnnounceDisconnection;
public event Action<byte[], Wrapper> AnnounceReceive;
private Socket _sock;
private X509Certificate certificate = X509Certificate.CreateFromCertFile("exportedcertificate.cer");
public Sock(int port)
{
try
{
Connections = new Dictionary<string, byte>();
_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_sock.Bind(new IPEndPoint(IPAddress.Any, port));
_sock.Listen(500);
_sock.BeginAccept(AcceptConnections, new Wrapper());
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
private void AcceptConnections(IAsyncResult result)
{
Wrapper wr = (Wrapper)result.AsyncState;
try
{
wr.sslStream = new SslStream(new NetworkStream(_sock.EndAccept(result), true));
wr.sslStream.BeginAuthenticateAsServer(certificate, AcceptAuthenticate, wr);
_sock.BeginAccept(AcceptConnections, new Wrapper());
}
catch (Exception e) { Console.WriteLine(e); }
}
private void AcceptAuthenticate(IAsyncResult result)
{
Wrapper wr = (Wrapper)result.AsyncState;
try
{
wr.sslStream.EndAuthenticateAsServer(result);
if (wr.sslStream.IsAuthenticated == true)
{
AnnounceNewConnection.Invoke(wr);
}
}
catch (Exception e) { Console.WriteLine(e); }
}
private void ReceiveData(IAsyncResult result)
{
Wrapper wr = (Wrapper)result.AsyncState;
try
{
AnnounceReceive.Invoke(wr.buffer, wr);
}
catch (Exception e) { Console.WriteLine(e); AnnounceDisconnection.Invoke(wr); }
}
}
मैं SSL स्ट्रीम उपयोग करना चाहते हैं लेकिन idk मैं कैसे सॉकेट वर्ग [प्रथम उदाहरण] –
@TorlanOther साथ .GetStream इस्तेमाल कर सकते हैं - पहला, तो आपको स्ट्रीम सॉकेट की चोटी पर की जरूरत है: सिस्टम। Net.NetworkStream आपको वह देगा। फिर, नेटवर्कस्ट्रीम के शीर्ष पर एक एसएसएलस्ट्रीम बनाएं। –
तो आपका मतलब AcceptConnections कॉलबैक पर है, मैं नेटवर्क स्ट्रीम करता हूं जो AsyncResult से स्ट्रीम प्राप्त करता है, तो मैं SSLStream के साथ .GetStream का उपयोग करता हूं? –