0
我在我的程序中遇到了套接字問題。我正在開發一個嵌入到另一個程序中的FTP服務器,並且爲此我創建了一個套接字和一個TCPListener。我的問題發生在這種情況下:
- 我第一次打開連接,如果沒有人連接,我關閉它,一切正常;否則如果有人連接到我的FTP服務器都可以正常工作;
- 如果在第一次關閉連接並再次打開之前沒有任何人連接之前,我得到一個SocketException「socket/ip address/port」已被使用,我不能再次實例化它。
我的函數的代碼是:Compact Framework 2.0中的接收超時
public void Start()
{
ServerStarted = true;
if (this.authHandler == null)
this.authHandler = new DefaultAuthHandler();
if (this.fsHandler == null)
this.fsHandler = new DefaultFileSystemHandler();
Socket socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
TcpListener listenerServer = new TcpListener(endpoint);
listenerServer.Start(); // The exception is here at the second time
// I open the connection without anybody connected before
try
{
while (ServerStarted)
{
socketServer = listenerServer.AcceptSocket();
try
{
IPEndPoint socketPort = (IPEndPoint)socketServer.RemoteEndPoint;
Session session = new Session(socketServer, bufferSize, this.authHandler.Clone(socketPort), this.fsHandler.Clone(socketPort));
session.Start();
sessions.Add(session);
p_HostIPAddress = socketPort.Address;
if (p_HostIPAddress != null)
HostConnected = true;
// Purge old sessions
for (int i = sessions.Count - 1; i >= 0; --i)
{
if (!sessions[i].IsOpen)
{
sessions.RemoveAt(i);
--i;
}
}
}
catch(Exception ex)
{
}
}
}
catch (SocketException socketEx)
{
}
finally
{
foreach (Session s in sessions)
{
s.Stop();
HostConnected = false;
}
TcpSocketListener = null;
}
}
我知道,在契約的框架也有不超時通話等等,我能做些什麼來避免我的插座在後臺仍處於打開狀態。 OHW,右,另一個額外的信息:
我的FTP服務器實際使用OpenNETCF FTP庫