[英]Stopping communication in client server using c#
我正在嘗試使用c#進行客戶端服務器通信。我已經使客戶端和服務器相互通信。 但是,我面臨的問題是如何停止通信?
條件:服務器應始終在偵聽(如果存在多個客戶端)。(目前,我正在使用單個客戶端)。 客戶端應具有停止或退出條件(即,當客戶端發送“退出”時,客戶端應終止,服務器應仍在偵聽其他客戶端),當它完成數據傳輸時。
我是C#的新手。 也嘗試過在Google上搜索。 但沒有找到我所需要的。
我的部分代碼:
服務器:
try
{
IPAddress addr = IPAddress.Parse("127.0.0.1");
string a = "recieved by server";
TcpListener Receiver = new TcpListener(addr, 1234);
Receiver.Start();
Console.WriteLine("trying to connect to " + addr);
Socket s = Receiver.AcceptSocket();
Console.WriteLine("Connected");
while (true)
{
byte[] b = new byte[100];
int k = s.Receive(b);
char[] chars = new char[b.Length / sizeof(char)];
System.Buffer.BlockCopy(b, 0, chars, 0, b.Length);
string dataReceived = new string(chars);
Console.WriteLine(dataReceived);
byte[] bw = new byte[a.Length * sizeof(char)];
System.Buffer.BlockCopy(a.ToCharArray(), 0, bw, 0, bw.Length);
Console.WriteLine("sending Acknowledgement to client");
s.Send(bw);
}
//Receiver.Stop();
}
客戶:
try
{
TcpClient TcpC = new TcpClient();
TcpC.Connect("127.0.0.1", 1234);
while (true)
{
Console.WriteLine("enter somethiong to send");
String s = Console.ReadLine();
NetworkStream CStream = TcpC.GetStream();
byte[] bw = new byte[s.Length * sizeof(char)];
System.Buffer.BlockCopy(s.ToCharArray(), 0, bw, 0, bw.Length);
Console.WriteLine("Transmit");
CStream.Write(bw, 0, bw.Length);
if (s == "exit")
{
CStream.Flush();
CStream.Close();
TcpC.Close();
break;
}
byte[] br = new byte[100];
int k = CStream.Read(br, 0, 100);
char[] chars = new char[br.Length / sizeof(char)];
System.Buffer.BlockCopy(br, 0, chars, 0, br.Length);
string ackReceived = new string(chars);
Console.WriteLine(ackReceived);
}
//TcpC.Close();
}
一旦您使用Socket s = Receiver.AcceptSocket();
接受來自客戶端的套接字連接, Socket s = Receiver.AcceptSocket();
您需要將命令處理邏輯放在另一個線程(同時使用Task
或Thread
)的while (true) { }
塊中,然后應該使用Receiver.AcceptSocket();
開始接受新的套接字連接Receiver.AcceptSocket();
再次。
問題是你做一個
Receiver.Stop();
當它應該是您要關閉的套接字時。
這個想法是您創建一個新的套接字來處理每次客戶端連接的情況-這是您終止的連接,而不是主監聽套接字。
這里有很好的示例代碼:
https://msdn.microsoft.com/zh-cn/library/system.net.sockets.tcplistener(v=vs.110).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.