簡體   English   中英

使用TCP c#將數據包從服務器發送到特定客戶端

[英]Send packet from server to a specific client using TCP c#

我目前正在編寫一個客戶端服務器應用程序。 客戶端發送UDP廣播消息以嘗試找到服務器,服務器發送UDP廣播消息以標識其位置。

客戶端收到標識服務器位置的消息時,它將嘗試使用socket.Connect(remoteEndPoint)連接到服務器。

服務器在偵聽套接字上偵聽這些TCP請求,並使用listensocket.accept()接受請求。 客戶端詳細信息存儲在數組中(包括其IP和端口號)

客戶端向服務器發送一條消息,其中包含有關用戶輸入的用戶名和密碼的信息。

服務器檢查數據庫中的用戶名和密碼,並根據結果向客戶端發送TCP消息(在此中斷),該客戶端發送請求以偵聽套接字檢查U&P的客戶端。 我正在嘗試使用以下代碼發送TCP消息,但由於出現錯誤,它將無法正常工作。

TCPSocket.SendTo(message, clientsArray[i].theirSocket.RemoteEndPoint);

我不確定您使用的是哪種方法。

但是在C#中,有兩個可以用作服務器的通用類: TcpClientSocket

TcpClient中

...
//Start Server
Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(localAddr, port);
server.Start();

//Accept Client
TcpClient client = server.AcceptTcpClient();            

NetworkStream stream = client.GetStream();
String data = "Message From Server";
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

//Send to Client
stream.Write(msg, 0, msg.Length);
...

並在套接字中使用TCP

...
//Start Server
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
IPEndPoint ep = new IPEndPoint(hostIP, port);
listenSocket.Bind(ep); 
listenSocket.Listen(backlog);

//Accept Client
Socket handler = listener.Accept();

String data = "Message From Server";
byte[] msg = Encoding.ASCII.GetBytes(data);

//Send to Client
handler.Send(msg);
...

並在套接字中使用UDP

您不應該在服務器上使用此功能,因為您正在使用TCP

...
IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

Socket s = new Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp);

String data = "Message From Server";
byte[] msg = Encoding.ASCII.GetBytes(data);
//Send to Client by UDP
s.SendTo(msg, endPoint);
...

通常,當您從客戶端獲得連接時,您將獲得TcpClient 該類具有方法GetStream() 如果您想向該客戶端發送一些數據,只需將所需數據寫入該流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM