私のプログラムのソケットに問題があります。私は別のプログラムにFTPサーバーembedeedを開発しており、そのためにソケットとTCPListenerを作成しました。この場合、私の問題が発生します。
- 誰も接続せずに閉じると、初めて接続を開きます。そうしないと、誰かが私のFTPサーバーに接続していれば、すべて正常に動作します。
- 初めて接続を終了して誰も接続せずにもう一度開くと、 "socket/ip address/port"というSocketExceptionが既に使用されていて、もう一度インスタンス化できません。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、右、別の余分な情報:
実際OpenNETCF FTPライブラリを使用して、私のftpサーバ