วิธีการปิด TcpClient ไม่ปิดการเชื่อมต่อ TCP ที่ขีดเส้นใต้

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 821625 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
บทความนี้อ้างถึง Microsoft ต่อไปนี้.NET Framework ไลบรารีของคลา namespaces:
  • System.Net
  • System.Net.Sockets
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

เมื่อคุณเรียกใช้การปิด TcpClientวิธี คุณต้องการให้เชื่อมต่อ TCP ขีดเส้นใต้ต้องปิดตามที่อธิบายไว้ในหัวข้อ "วิธี TcpClient.Close" ของไลบรารีคลาส.NET Framework เอกสาร สำหรับข้อมูลเพิ่มเติม โปรดเยี่ยมชมเว็บไซต์ต่อไปนี้ของ Microsoft::
.aspx http://msdn2.microsoft.com/en-us/library/system.net.sockets.tcpclient.close (vs.71)

การแก้ไข

เมื่อต้องการแก้ไขปัญหานี้ ปิดที่เกี่ยวข้องNetworkStreamวัตถุที่จะTcpClient GetStreamวิธีการคืนค่า

ข้อมูลเพิ่มเติม

ขั้นตอนในการทบทวนการเกิดปัญหา

  1. ในตัวแก้ไขข้อความเช่น Notepad วางตัวอย่างรหัสต่อไปนี้
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    class Server
    {
    	static void Main(string[] args)
    	{
    		try
    		{
    			const int portNumber = 10000;
    			TcpListener tcpListener = new TcpListener(IPAddress.Loopback, portNumber);
    
    			tcpListener.Start();
    
    			Console.WriteLine("Waiting for a connection....");
    
    			//Accept the pending client connection, and then return a TcpClient that is initialized for communication.
    			TcpClient tcpClient = tcpListener.AcceptTcpClient();
    			Console.WriteLine("Connection accepted.");
    
    			NetworkStream networkStream = tcpClient.GetStream();
    
    			string responseString = "You have successfully connected to me\n";
    
    			Byte[] sendBytes = Encoding.ASCII.GetBytes(responseString.ToCharArray());
    			networkStream.Write(sendBytes, 0, sendBytes.Length);
    
    			Console.Write("Message Sent /> : " + responseString);
    
    			//Close networkStream and TcpClient.
    			//networkStream.Close();
    			tcpClient.Close();
    
    			//Wait until you can see that the connection is closed in the client.
    			Console.ReadLine();
                                
    			//Close the listener.
    			tcpListener.Stop();
    
    		}
    		catch (Exception e) 
    		{
    			Console.WriteLine(e.ToString());
    		}   
    	}
    }
  2. บันทึกแฟ้มเป็น Server.cs
  3. คลิกเริ่มการทำงานชี้ไปที่โปรแกรมชี้ไปที่Microsoft Visual Studio .NET(สำหรับ Microsoft Visual Studio .NET 2002) หรือMicrosoft Visual Studio .NET 2003ชี้ไปที่เครื่องมือการ.NET visual Studioแล้ว คลิกvisual Studio .NET คำสั่งพร้อมท์หรือvisual Studio พร้อมท์คำสั่ง.NET 2003.
  4. หน้าจอพร้อมรับคำสั่ง พิมพ์คำสั่งต่อไป และกด enter เพื่อคอมไพล์ Server.cs:
    csc server.cs
  5. ที่พรอมต์คำสั่ง ให้พิมพ์คำสั่งต่อไปนี้ แล้วกด ENTER::
    เริ่มการทำงาน server.exe
  6. ที่พรอมต์คำสั่ง ให้พิมพ์คำสั่งต่อไปนี้ แล้วกด ENTER::
    netstat -p tcp - ตัว
    แจ้งเตือนที่มีเปิดการเชื่อมต่อ TCP ที่พอร์ต 10000 และการเชื่อมต่ออยู่ใน นั้นรอรับการติดต่อState:
  7. ในตัวแก้ไขข้อความเช่น Notepad วางตัวอย่างรหัสต่อไปนี้
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    class Client
    {
    	static void Main(string[] args)
    	{
    		try
    		{
    			TcpClient tcpClient = new TcpClient();
    		
    			tcpClient.Connect(IPAddress.Loopback, 10000);
    			NetworkStream networkStream = tcpClient.GetStream();
    
    			if(networkStream.CanWrite && networkStream.CanRead)
    			{
    				// Reads the NetworkStream to a byte buffer.
    				byte[] bytes = new byte[38];
    				networkStream.Read(bytes, 0, bytes.Length);
    				
    				// Returns to the console the data that is received from the host.
    				string returndata = Encoding.ASCII.GetString(bytes);
    				Console.Write("This is what the host returned to you: " + returndata.TrimEnd(new char[] {' '}));
    				Console.ReadLine();
    				networkStream.Close();
    				tcpClient.Close();
    			}
    		}
    		catch (Exception e ) 
    		{
    			Console.WriteLine(e.ToString());
    		}
    	}
    }
  8. บันทึกแฟ้มเป็น Client.cs
  9. หน้าจอพร้อมรับคำสั่ง พิมพ์คำสั่งต่อไป และกด enter เพื่อสร้าง Client.cs:
    csc client.cs
  10. ที่พรอมต์คำสั่ง ให้พิมพ์คำสั่งต่อไปนี้ แล้วกด ENTER::
    เริ่มการทำงาน client.exe
  11. ที่พรอมต์คำสั่ง ให้พิมพ์คำสั่งต่อไปนี้ แล้วกด ENTER::
    netstat -p tcp - ตัว
    แจ้งเตือน ที่มีเปิดการเชื่อมต่อ TCP และ ที่อยู่การเชื่อมต่อนี้สร้างState:

    เนื่องจากถูกปิดการเชื่อมต่อบนฝั่งเซิร์ฟเวอร์ การเชื่อมต่อซ็อกเก็ตด้านเซิร์ฟเวอร์ควรอยู่ในนั้นfin_wait_2สถานะ และการเชื่อมต่อซ็อกเก็ตฝั่งไคลเอ็นต์ควรอยู่ในนั้นclose_waitState: ลักษณะการทำงานนี้มีการอธิบายไว้ใน 793 RFC - "ส่งควบคุมโพรโทคอลอินเทอร์เน็ต Darpa โปรแกรมโพรโทคอลสเปค
  12. เปลี่ยนรหัสในขั้นตอนที่ 1 โดย uncommenting บรรทัดต่อไปนี้:
    //networkStream.Close();
    ทำซ้ำขั้นตอนที่ 3 ถึง 9

    แจ้งให้ทราบที่อยู่การเชื่อมต่อซ็อกเก็ตด้านเซิร์ฟเวอร์นี้fin_wait_2สถานะ และการเชื่อมต่อซ็อกเก็ตฝั่งไคลเอ็นต์อยู่ในนั้นclose_waitState: ลักษณะการทำงานนี้เกิดขึ้นเนื่องจากการเชื่อมต่อถูกปิดอยู่ทางด้านเซิร์ฟเวอร์

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการTcpClientคลาส เยี่ยมชมเว็บไซต์ต่อไปนี้ของ Microsoft:
.aspx http://msdn2.microsoft.com/en-us/library/system.net.sockets.tcpclient (vs.71)

คุณสมบัติ

หมายเลขบทความ (Article ID): 821625 - รีวิวครั้งสุดท้าย: 14 มกราคม 2554 - Revision: 4.0
ใช้กับ
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Keywords: 
kbclientserver kbapi kbprogramming kbprb kbmt KB821625 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:821625

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com