[英]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#中,有兩個可以用作服務器的通用類: TcpClient和Socket
在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.