Tôi gặp vấn đề sau:C kết nối # .NET Ổ cắm vấn đề - Chỉ có một cách sử dụng của mỗi địa chỉ socket thường được phép
Khi tôi đóng ứng dụng WM6 của tôi và sau đó cố gắng để bắt đầu nó một lần nữa tôi nhận được lỗi này: Chỉ sử dụng một địa chỉ của từng địa chỉ cổng (giao thức/địa chỉ mạng/cổng) tại System.Net.Sockets.Socket.Bind (EndPoint localEP) tại System.Net.Sockets.Socket.TcpListener.Start() ...
Tôi nghĩ điều này là do khoảng thời gian cho kết nối hết thời gian chờ, vì vậy tôi sẽ muốn đóng tất cả các phần mở và buộc nó tạo một kết nối mới, đây có phải là cách chính xác để tiến hành hoặc có cách nào khác để xử lý việc này không?
Đây là đoạn mã sử dụng để bắt đầu nghe:
/// <summary>
/// Listens Asynchronously to Clients, creates a recieveMessageHandler to process the read.
///
/// Check WIKI, TODOS
/// </summary>
/// <returns></returns>
public void Listen()
{
myTcpListener.Start();
while (true)
{
//blocks until a client has connected to the server
try
{
TcpClient myTcpClient = myTcpListener.AcceptTcpClient();
DateTime now = DateTime.Now;
//Test if it's necessary to create a client
ClientConnection client = new ClientConnection(myTcpClient, new byte[myTcpClient.ReceiveBufferSize]);
// Capture the specific client and pass it to the receive handler
client.NetworkStream.BeginRead(client.Data, 0, myTcpClient.ReceiveBufferSize, r => receiveMessageHandler(r, client), null);
}
catch (Exception excp)
{
Debug.WriteLine(excp.ToString());
}
}
}
Đóng myTcpListener khi tắt máy. –
Tôi làm, tuy nhiên tôi đang gọi một số Dll mà đôi khi sụp đổ các ứng dụng và mã tắt máy không được gọi. – Astronaut
Bạn cần xử lý tốt hơn lỗi đó. Bởi chỉ cần rơi ra và rời khỏi tài nguyên không được quản lý của bạn nằm xung quanh, bạn nhận được lỗi này. Mặc dù CLR xử lý quản lý bộ nhớ cho bạn đối với các đối tượng được quản lý, bạn cần thực hiện nó cho các đối tượng không được quản lý, chẳng hạn như các kết nối tệp và mạng. –