繁体   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