【发布时间】:2023-03-25 05:02:01
【问题描述】:
我的服务器端有这段代码。
public static void Data_IN(object cSocket)
{
Socket clientSocket = (Socket)cSocket;
byte[] Buffer;
int readBytes;
while (true)
{
Buffer = new byte[clientSocket.SendBufferSize];
readBytes = clientSocket.Receive(Buffer);
if (readBytes > 0)
{
Packet p = new Packet(Buffer);
DataManager(p);
}
}
}
主要问题是当我停止调试代码时,服务器总是崩溃并说
System.Net.Sockets.SocketException:远程服务器关闭连接
错误总是在readBytes = clientSocket.Recieve(Buffer);
这是我可以使服务器崩溃的唯一方法,我唯一担心的是,当有人使用我创建的聊天程序并且他/她的计算机崩溃时,聊天服务器将关闭,我总是需要重新启动服务器。
关闭窗口时执行的客户端代码
private void MainWindow_Closed(object sender, EventArgs e)
{
if (isConnected)
{
Packet p = new Packet(PacketType.CloseConnection, ID);
p.data.Add(login);
p.data.Add("exits from chat");
socket.Send(p.ToBytes());
socket.Close();
isConnected = false;
thread.Abort();
}
}
下面是使用data_in的代码部分,该代码在客户端
private void ConnectBtn_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrWhiteSpace(Login.Text))
{
MessageBox.Show("Add username");
}
else if (!IPAddress.TryParse(serverIP.Text, out ipAdress))
{
MessageBox.Show("Add valid ip");
}
else
{
ClearRequireMsg();
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipEndPoint = new IPEndPoint(ipAdress, 4242);
try
{
socket.Connect(ipEndPoint);
login = Login.Text;
isConnected = true;
ConnectBtn.IsEnabled = false;
SendBtn.IsEnabled = true;
thread = new Thread(Data_IN);
thread.Start();
}
catch (SocketException ex)
{
AddMsgToBoard("Error during connecting to server", "System");
}
}
}
【问题讨论】:
-
显示客户端代码。在服务器开始读取之前,流可能已经在客户端处理
-
@RudreshaParameshappa 我现在将在我关闭窗口时发生的代码广告
标签: c#