- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先。对于大量的代码段,我深表歉意。但是我现阶段绝望了,需要对我做错的事情做出一些回答。
我启动服务器,然后客户端连接到服务器,然后单击登录以验证其密码。但是事实是。第一次发送请求时,一切运行正常,但是第二次在第一次尝试后,再次按下登录按钮时,一切正常。我懂了
Exception thrown: 'System.ObjectDisposedException' in System.dll
private byte[] _buffer = new byte[16 * 1024];
static List<Socket> _connectedClients = new List<Socket>();
private Socket _serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
private IPEndPoint ipport = null;
private int port = 0;
private void SetupServer()
{
lstConnections.Items.Add("--==( Setting Up Server )==--");
_serverSocket.Bind(ipport);
_serverSocket.Listen(38);
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
}
private void AcceptCallback(IAsyncResult AR)
{
Socket socket;
try
{
//socket = (Socket)AR.AsyncState;
socket = _serverSocket.EndAccept(AR);
}
catch (ObjectDisposedException)
{
return;
}
_connectedClients.Add(socket);
socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), socket);
Invoke((MethodInvoker)delegate { lstConnections.Items.Add("Client Connected, Waiting for request..."); });
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
}
private void RecieveCallback(IAsyncResult AR)
{
try
{
Socket socket = (Socket)AR.AsyncState;
int recieved = 0;
try
{
recieved = socket.EndReceive(AR);
}
catch (Exception exc)
{
FileHandlerTxt FHandler = new FileHandlerTxt();
FHandler.appendDataToTextFile(new List<string> { string.Format("Client forcefully disconnected at {0}. Error : {1}", DateTime.UtcNow.ToLongDateString(), exc.Message) });
socket.Close();
_connectedClients.Remove(socket);
return;
}
byte[] dataBuffer = new byte[recieved];
Array.Copy(_buffer, dataBuffer, recieved);
object unkown = dataBuffer.Deserialize();
if (unkown is Login)
{
Invoke((MethodInvoker)delegate { lstConnections.Items.Add("Got login request..."); });
#region Login
Login login = (Login)unkown;
//Do stuff in the call Class
// .Serialize() is an extension method
byte[] data = call.Serialize();
socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);
socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), socket);
Invoke((MethodInvoker)delegate { lstConnections.Items.Add(login.Username + " Signed in"); });
}
else
{
MessageClass call = new MessageClass("Failed. Password incorrect");
call.ckey = 2;
login.updateFailedAttempts(LoginAttempts + 1);
byte[] data = call.Serialize();
socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);
socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), socket);
}
}
else
{
MessageClass call = new MessageClass("Failed. To many failed attempts");
call.ckey = 4;
RootObject LocData = LocationData.getLocationData();
string message = string.Format("You have entered your password wrong 3 times on {0} at {1} from {2}:{3}. Your account has been locked. Please go to the lodge to unlock your account.", DateTime.UtcNow.ToLongDateString(), DateTime.UtcNow.ToLongTimeString(), IPLocation.getIPAddress(), LocData.country);
message.SendEmail();
byte[] data = call.Serialize();
socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);
socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), socket);
}
}
else
{
MessageClass call = new MessageClass("Failed. User does not exists");
call.ckey = 3;
byte[] data = call.Serialize();
socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);
socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), socket);
}
#endregion
}
else if (unkown is Client)
{
#region Client
Client newClient = (Client)unkown;
newClient.Queries(newClient.ckey);
Invoke((MethodInvoker)delegate
{
lstConnections.Items.Add("Did requested Client query");
});
#endregion
}
else if (unkown is MessageClass)
{
Invoke((MethodInvoker)delegate { lstConnections.Items.Add("Got Disconnect request..."); });
MessageClass call = (MessageClass)unkown;
if (call.ckey == -10)
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();
socket.Dispose();
_connectedClients.Remove(socket);
Invoke((MethodInvoker)delegate { lstConnections.Items.Add("Client Disconnected..."); });
return;
}
}
}
catch (Exception exc)
{
FileHandlerTxt FHandler = new FileHandlerTxt();
FHandler.appendDataToTextFile(new List<string> { string.Format("RecieveCallback problem at {0}. Error : {1}", DateTime.UtcNow.ToLongDateString(), exc.Message) });
}
}
private void SendCallback(IAsyncResult AR)
{
Socket socket = (Socket)AR.AsyncState;
socket.EndSend(AR);
}
private void btnSignIn_Click(object sender, RoutedEventArgs e)
{
//Enable wat onder is vir Authentication
try
{
Login login = new Login(txtUsername.Text,passboxPassword.SecurePassword.EncryptPassword(txtUsername.Text),IPLocation.getIPAddress(),0);
_clientSocket.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.14"),8081));
_clientSocket.Send(login.Serialize());
RecieveResponse();
}
catch (SocketException se)
{
FileHandlerTxt FHandler = new FileHandlerTxt();
FHandler.appendDataToTextFile(new List<string> { string.Format("Socket Exception {0} on {1}", se.Message, DateTime.UtcNow.ToLongDateString()) });
}
catch (Exception exc)
{
FileHandlerTxt FHandler = new FileHandlerTxt();
FHandler.appendDataToTextFile(new List<string> { string.Format("Exception {0} on {1}", exc.Message, DateTime.UtcNow.ToLongDateString()) });
}
}
private void RecieveResponse()
{
byte[] buffer = new byte[2048];
int recieved = _clientSocket.Receive(buffer, SocketFlags.None);
if (recieved == 0) return;
byte[] data = new byte[recieved];
Array.Copy(buffer,data,recieved);
object unkown = data.Deserialize();
MessageClass returnMessage = (MessageClass)unkown;
if (returnMessage.ckey == 1)
{
string AskingPasscode = "";
RecievePasscode passauth = new RecievePasscode();
if (passauth.ShowDialog() == false)
{
AskingPasscode = passauth.PassCode;
}
if (AskingPasscode == returnMessage.PassKey.DecryptPasscode(txtUsername.Text))
{
if (returnMessage.AuthLevel == 2)
{
SESSION.AccountType = "Admin";
SESSION.AuthLevel = 2;
SESSION.ID = returnMessage.client.ID;
SESSION.Name = returnMessage.client.Name;
MainWindow main = new MainWindow();
main.Show();
this.Close();
}
else if (returnMessage.AuthLevel == 1)
{
SESSION.AccountType = "Hunter";
SESSION.AuthLevel = 1;
SESSION.ID = returnMessage.client.ID;
SESSION.Name = returnMessage.client.Name;
MainWindow main = new MainWindow();
main.Show();
this.Close();
}
else
{
SESSION.AccountType = "User";
SESSION.AuthLevel = 0;
SESSION.ID = returnMessage.client.ID;
SESSION.Name = returnMessage.client.Name;
MainWindow main = new MainWindow();
main.Show();
this.Close();
}
}
}
else
{
MessageBox.Show(returnMessage.Message);
}
MessageClass call = new MessageClass("Exit");
call.ckey = -10;
_clientSocket.Send(call.Serialize());
_clientSocket.Shutdown(SocketShutdown.Both);
_clientSocket.Close();
_clientSocket.Dispose();
MessageBox.Show("Client Disconnect.");
}
最佳答案
在客户端,您正在_clientSocket
中放置RecieveResponse
,但是_clientSocket
似乎已被下一步按钮btnSignIn_Click
所重用。这肯定会导致ObjectDisposedException
您每次都需要创建一个新的套接字。
关于c# - 使用套接字获取对象处置异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42590193/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!