浏览代码

优化:

Tcp类
控制层复用抽层
Server
Somuns 4 年前
父节点
当前提交
d5ea41bb41
共有 5 个文件被更改,包括 250 次插入172 次删除
  1. +24
    -22
      StuMgmServer/StuMgmLib/MyNameSpace/CommonData.cs
  2. +174
    -97
      StuMgmServer/StuMgmLib/MyNameSpace/SystemCtrl.cs
  3. +25
    -30
      StuMgmServer/StuMgmLib/MyNameSpace/TcpConn.cs
  4. +0
    -1
      StuMgmServer/StuMgmServer/Program.cs
  5. +27
    -22
      StuMgmServer/StuMgmServer/Server.cs

+ 24
- 22
StuMgmServer/StuMgmLib/MyNameSpace/CommonData.cs 查看文件

@@ -5,25 +5,40 @@
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data;


namespace StuMgmLib.MyNameSpace namespace StuMgmLib.MyNameSpace
{ {
public class Info
#region QuickTable

internal class QTInfo
{
public int Token;
public Lvl Level;
public QTInfo(int token, Lvl lv)
{
Token = token;
Level = lv;
}
}
public class QT // quickTable
{ {
internal const Int16 tokenMaxCount = 32767; internal const Int16 tokenMaxCount = 32767;
internal static Dictionary<short, int> myToken = new Dictionary<short, int>();
internal static Dictionary<short, QTInfo> quickTable = new Dictionary<short, QTInfo>();
} }


#endregion

#region ClientClass #region ClientClass


public enum ClientFunc public enum ClientFunc
{ {
VerifyLogin = 1, VerifyLogin = 1,
GetCourseInfo = 2, GetCourseInfo = 2,
GetUserCourseInfo = 3,
GetSelfUserCourseInfo = 3,
GetSomeoneUserCInfo = 6,
SUpdateCourse = 4, SUpdateCourse = 4,
TUpdateCourse = 5, TUpdateCourse = 5,

} }
public enum Lvl public enum Lvl
{ {
@@ -65,19 +80,11 @@ namespace StuMgmLib.MyNameSpace
} }


[Serializable] [Serializable]
public class UserCourseInfoOper // T represents teacher, S ->student
public class UserCourseInfoOper
{ {
public short Job_Id; public short Job_Id;
public int Token; public int Token;
public string sqlStr;
}


[Serializable]
public enum CourseStatusEnum
{
//lll,
//...//
public string Status;
} }




@@ -87,6 +94,8 @@ namespace StuMgmLib.MyNameSpace
[Serializable] [Serializable]
public class ServerResponse public class ServerResponse
{ {
public bool Final;
public string ErrMessage;
public object Object; public object Object;
public ServerResponse(object obj) public ServerResponse(object obj)
{ {
@@ -100,7 +109,6 @@ namespace StuMgmLib.MyNameSpace
{ {
public int Token; public int Token;
public Lvl Level; public Lvl Level;
public bool Final;
} }


[Serializable] [Serializable]
@@ -123,14 +131,8 @@ namespace StuMgmLib.MyNameSpace
public string Details;//信息描述 public string Details;//信息描述
} }


[Serializable]
public class UpdateRp // 数据库操作反馈信息
{
public bool Final;
public string ErrMessge;
#endregion
}


#endregion


} }




+ 174
- 97
StuMgmServer/StuMgmLib/MyNameSpace/SystemCtrl.cs 查看文件

@@ -1,17 +1,18 @@
using MySql.Data.MySqlClient;
/* Describtion : Class for Data Operation
* Company : Wuxi Xinje
* Author : Somuns
* DateTime : 2021/1/28
*/
using MySql.Data.MySqlClient;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization.Formatters.Binary;
using System.Text;


namespace StuMgmLib.MyNameSpace namespace StuMgmLib.MyNameSpace
{ {
class SystemCtrl
public class SystemCtrl
{ {
#region 流 #region 流
/// <summary> /// <summary>
@@ -38,7 +39,6 @@ namespace StuMgmLib.MyNameSpace
} }
#endregion #endregion



/// <summary> /// <summary>
/// 获取返回数据 /// 获取返回数据
/// </summary> /// </summary>
@@ -48,83 +48,93 @@ namespace StuMgmLib.MyNameSpace
{ {
var cr = Deserialize<ClientRequest>(clientRequset); var cr = Deserialize<ClientRequest>(clientRequset);


ServerResponse sr = null;
ServerResponse sr = new ServerResponse(null);


switch (cr.Func) switch (cr.Func)
{ {
case ClientFunc.VerifyLogin: case ClientFunc.VerifyLogin:
UserInfoLogin uil = (UserInfoLogin)cr.Object;
#region 登陆验证
LoginResponse lr = new LoginResponse(); LoginResponse lr = new LoginResponse();
sr = new ServerResponse(lr);
UserInfoLogin login = (UserInfoLogin)cr.Object;


if (getPermission(uil, out lr.Level))
lr.Token = addToken(uil.Account, ref Info.myToken);
getPerFromDB(login, out sr.Final, out sr.ErrMessage, out lr.Level);
if (sr.Final)
lr.Token = addToken(login.Account, lr.Level, ref QT.quickTable);


sr = new ServerResponse(lr);
break; break;
#endregion
case ClientFunc.GetCourseInfo: case ClientFunc.GetCourseInfo:

sr = new ServerResponse(getCourseInfo());
Debug.Print(sr.Object.GetType().ToString());
#region 获取课程表
sr.Object = getCosInfo(out sr.Final, out sr.ErrMessage);
break; break;

case ClientFunc.GetUserCourseInfo: // 获取学员个人课程信息,详情
#endregion
case ClientFunc.GetSelfUserCourseInfo:
#region 学员获取个人进度详情


UserCourseInfoReq ucir = (UserCourseInfoReq)cr.Object; UserCourseInfoReq ucir = (UserCourseInfoReq)cr.Object;
UserCourseInfo uc = new UserCourseInfo(); UserCourseInfo uc = new UserCourseInfo();
sr = new ServerResponse(uc);


if (!verifyToken(ucir.Job_Id, ucir.Token))
vrTokenFrT(ucir.Job_Id, ucir.Token, out sr.Final, out sr.ErrMessage);
if (!sr.Final)
break; break;


if (getUserCourseStatus(ucir.Job_Id, out uc.Status, out uc.Details))
sr = new ServerResponse(uc);
getUsrCosStatus(ucir.Job_Id, out sr.Final, out sr.ErrMessage, out uc.Status, out uc.Details);
break; break;


case ClientFunc.SUpdateCourse: // 学生修改课程信息,仅有权修改自己的个别类型状态
/* Todo
verify (jobid token)
update */
UserCourseInfoOper suico = (UserCourseInfoOper)cr.Object;
UpdateRp urs = new UpdateRp();
#endregion
case ClientFunc.GetSomeoneUserCInfo:
#region 教师获取某人进度详情

UserCourseInfoOper uciO = (UserCourseInfoOper)cr.Object;


if (!verifyToken(suico.Job_Id, suico.Token))
vrTokenFrT(uciO.Job_Id, uciO.Token, out sr.Final, out sr.ErrMessage);
if (!sr.Final)
break; break;


sUpdateInfo(suico.Job_Id, suico.sqlStr, out urs.Final, out urs.ErrMessge);
Lvl l = getPerFrT(uciO.Job_Id);
vrPer(l, out sr.Final, out sr.ErrMessage);
if (!sr.Final)
break;

sr.Object = getUsrCosStatus(uciO.Status, out sr.Final, out sr.ErrMessage);
break;


sr = new ServerResponse(urs);
#endregion
case ClientFunc.SUpdateCourse:
#region 学生修改课程状态


UserCourseInfoOper suico = (UserCourseInfoOper)cr.Object;

vrTokenFrT(suico.Job_Id, suico.Token, out sr.Final, out sr.ErrMessage);
if (!sr.Final)
break;

sUpUsrCosInfo(suico.Job_Id, suico.Status, out sr.Final, out sr.ErrMessage);
break; break;

#endregion
case ClientFunc.TUpdateCourse: case ClientFunc.TUpdateCourse:
/*Todo
教师修改课程信息,有权更改学生课程状态
verify (jobid,token)
verify(permission)
update*/
UserCourseInfoOper tucio = (UserCourseInfoOper)cr.Object;
UpdateRp urt = new UpdateRp();
#region 教师修改课程详情


if (!verifyToken(tucio.Job_Id, tucio.Token))
break;
UserCourseInfoOper tucio = (UserCourseInfoOper)cr.Object;


Lvl l = Lvl.Error;
if (!getPermission(tucio.Job_Id, out l))
vrTokenFrT(tucio.Job_Id, tucio.Token, out sr.Final, out sr.ErrMessage);
if (!sr.Final)
break; break;


if (!(l == Lvl.Teacher || l == Lvl.Teacher))
{
urt.Final = false;
urt.ErrMessge = "permission err";
Lvl lv = getPerFrT(tucio.Job_Id);
vrPer(lv, out sr.Final, out sr.ErrMessage);
if (!sr.Final)
break; break;
}


tUpdateInfo(tucio.sqlStr, out urt.Final, out urt.ErrMessge);
sr = new ServerResponse(urt);
tUpUsrCosInfo(tucio.Status, out sr.Final, out sr.ErrMessage);


break; break;
#endregion
} }
if (null == sr)
return null;

return Serialize<ServerResponse>(sr); return Serialize<ServerResponse>(sr);
} }
catch catch
@@ -135,24 +145,16 @@ namespace StuMgmLib.MyNameSpace


const string conStr = "data source=localhost; initial catalog=xinje; user id=root; pwd=980505;charset = utf8"; const string conStr = "data source=localhost; initial catalog=xinje; user id=root; pwd=980505;charset = utf8";


#region Verify
#region Token、Permission


static bool getPermission(object o, out Lvl level)
static void getPerFromDB(UserInfoLogin o, out bool final, out string errMessage, out Lvl level)
{ {
final = false;
level = Lvl.Error; level = Lvl.Error;
errMessage = null;


string qStu = "select * from user where account = "; string qStu = "select * from user where account = ";

if (o is UserInfoLogin)
{
UserInfoLogin uil = (UserInfoLogin)o;
qStu += uil.Account + " and password = '" + uil.Password + "'";
} // 首次登陆验证
else if (o is UserCourseInfoOper)
{
UserCourseInfoOper ucio = (UserCourseInfoOper)o;
qStu += ucio.Job_Id + ucio.sqlStr;
} // 数据库操作验证权限
qStu += o.Account + " and password = '" + o.Password + "'";


MySqlConnection con = new MySqlConnection(conStr); MySqlConnection con = new MySqlConnection(conStr);
try try
@@ -164,17 +166,19 @@ namespace StuMgmLib.MyNameSpace
{ {
mReader.Read(); mReader.Read();
level = (Lvl)mReader.GetInt16("level"); level = (Lvl)mReader.GetInt16("level");
return true;
final = true;
} }
else else
{ {
level = Lvl.NotFound; level = Lvl.NotFound;
return false;
final = false;
} }
} }
catch (MySqlException)
catch (MySqlException e)
{ {
return false;
errMessage = e.Message;
final = false;
Debug.Print(DateTime.Now + " : " + e.Message);
} }
finally finally
{ {
@@ -182,11 +186,11 @@ namespace StuMgmLib.MyNameSpace
} }
} }


static int addToken(short job_id, ref Dictionary<short, int> myToken)
static int addToken(short job_id, Lvl level, ref Dictionary<short, QTInfo> myToken)
{ {
if (myToken != null) if (myToken != null)
{ {
if (myToken.Count > Info.tokenMaxCount) // 清除缓存
if (myToken.Count > QT.tokenMaxCount) // 清除缓存
myToken.Clear(); myToken.Clear();
if (myToken.ContainsKey(job_id)) if (myToken.ContainsKey(job_id))
{ {
@@ -195,24 +199,54 @@ namespace StuMgmLib.MyNameSpace
} }
Random r = new Random(); // 伪随机 Random r = new Random(); // 伪随机
int token = r.Next(); int token = r.Next();
myToken.Add(job_id, token);

QTInfo u = new QTInfo(token, level);

myToken.Add(job_id, u);
return token; return token;
} }


static bool verifyToken(short job_id, int token)
static void vrTokenFrT(short job_id, int token, out bool final, out string errMessage)
{
final = false;
errMessage = null;
if (QT.quickTable[job_id].Token != token)
{
errMessage = "Token Err";
return;
}
final = true;
}

static Lvl getPerFrT(short job_id)
{
return QT.quickTable[job_id].Level;
}

static void vrPer(Lvl lv, out bool final, out string errMessage)
{ {
if (Info.myToken[job_id] == token)
return true;
return false;
if (!(lv == Lvl.Teacher || lv == Lvl.Admin))
{
final = false;
errMessage = "Permission denied";
}
final = true;
errMessage = null;
} }


#endregion #endregion


#region GetInfo

// Common
#region CourseInfo #region CourseInfo
const int nameColumn = 1; const int nameColumn = 1;
const int contentColumn = 3; const int contentColumn = 3;
static List<CourseInfo> getCourseInfo()
static List<CourseInfo> getCosInfo(out bool final, out string errMessage)
{ {
final = false;
errMessage = null;

List<CourseInfo> listCI = new List<CourseInfo>(); List<CourseInfo> listCI = new List<CourseInfo>();
string str = "select * from course_info"; string str = "select * from course_info";
MySqlConnection con = new MySqlConnection(conStr); MySqlConnection con = new MySqlConnection(conStr);
@@ -231,10 +265,12 @@ namespace StuMgmLib.MyNameSpace
ci.Content = (mReader.IsDBNull(contentColumn)) ? "无" : mReader.GetString("content"); ci.Content = (mReader.IsDBNull(contentColumn)) ? "无" : mReader.GetString("content");
listCI.Add(ci); listCI.Add(ci);
} }
final = true;
return listCI; return listCI;
} }
catch (MySqlException mySqlEx) catch (MySqlException mySqlEx)
{ {
errMessage = mySqlEx.Message;
Debug.Print(DateTime.Now + " : " + mySqlEx.Message); Debug.Print(DateTime.Now + " : " + mySqlEx.Message);
return null; return null;
} }
@@ -248,12 +284,13 @@ namespace StuMgmLib.MyNameSpace
#region UserCourseInfo #region UserCourseInfo
const int statusColumn = 3; const int statusColumn = 3;
const int detailsColumn = 4; const int detailsColumn = 4;

/// <summary> /// <summary>
/// 员工获取课程信息
/// 员工获取课程详情
/// </summary> /// </summary>
static bool getUserCourseStatus(short jobId, out string status, out string details)
static void getUsrCosStatus(short jobId, out bool final, out string errMessage, out string status, out string details)
{ {
final = false;
errMessage = null;
status = ""; status = "";
details = ""; details = "";
string qStu = "select * from usercouse_info where job_id = " + jobId; string qStu = "select * from usercouse_info where job_id = " + jobId;
@@ -266,17 +303,59 @@ namespace StuMgmLib.MyNameSpace
mReader.Read(); mReader.Read();
status = (mReader.IsDBNull(statusColumn)) ? " " : mReader.GetString("status"); status = (mReader.IsDBNull(statusColumn)) ? " " : mReader.GetString("status");
details = (mReader.IsDBNull(detailsColumn)) ? " " : mReader.GetString("details"); details = (mReader.IsDBNull(detailsColumn)) ? " " : mReader.GetString("details");
return true;
final = true;
}
catch (MySqlException MySqlE)
{
errMessage = MySqlE.Message;
Debug.Print(DateTime.Now + " : " + MySqlE.Message);
}
finally
{
con.Close();
}
}
/// <summary>
/// 教师获取课程详情
/// </summary>
static List<UserCourseInfo> getUsrCosStatus(string sqlStr, out bool final, out string errMessage)
{
List<UserCourseInfo> list = new List<UserCourseInfo>();
final = false;
errMessage = null;

string qStu = "select * from usercouse_info where";
qStu += sqlStr;
MySqlConnection con = new MySqlConnection(conStr);
try
{
con.Open();
MySqlCommand mCmd = new MySqlCommand(qStu, con);
MySqlDataReader mReader = mCmd.ExecuteReader();
UserCourseInfo u = new UserCourseInfo();
while (mReader.Read())
{
u.JobId = mReader.GetInt16("job_id");
u.Name = mReader.GetString("name");
u.Status = (mReader.IsDBNull(statusColumn)) ? " " : mReader.GetString("status");
u.Details = (mReader.IsDBNull(detailsColumn)) ? " " : mReader.GetString("details");
list.Add(u);
}
final = true;
return list;
} }
catch (MySqlException)
catch (MySqlException MySqlE)
{ {
return false;
errMessage = MySqlE.Message;
Debug.Print(DateTime.Now + " : " + MySqlE.Message);
return null;
} }
finally finally
{ {
con.Close(); con.Close();
} }
} }
#endregion


#endregion #endregion


@@ -287,26 +366,27 @@ namespace StuMgmLib.MyNameSpace
/// <summary> /// <summary>
/// 学员更改个人课程状态 /// 学员更改个人课程状态
/// </summary> /// </summary>
static void sUpdateInfo(short job_id, string sqlStr, out bool final, out string eMessage)
static void sUpUsrCosInfo(short job_id, string sqlStr, out bool final, out string eMessage)
{ {
final = false; final = false;
eMessage = null; eMessage = null;
string str = "select * from usercourse_info where account = " + job_id + sqlStr;
MySqlConnection conn = new MySqlConnection();
string str = "UPDATE usercouse_info " + " set status = '" + sqlStr + "' where job_id = " + job_id;
MySqlConnection con = new MySqlConnection(conStr);
try try
{ {
MySqlCommand cmd = new MySqlCommand(str, conn);
con.Open();
MySqlCommand cmd = new MySqlCommand(str, con);
if (cmd.ExecuteNonQuery() > 0) if (cmd.ExecuteNonQuery() > 0)
final = true; final = true;
} }
catch (MySqlException e)
catch (MySqlException MySqlE)
{ {
eMessage = e.Message;
Debug.Print(e.Message); // 可以去掉
eMessage = MySqlE.Message;
Debug.Print(DateTime.Now + " : " + MySqlE.Message);
} }
finally finally
{ {
conn.Close();
con.Close();
} }
} }


@@ -314,10 +394,11 @@ namespace StuMgmLib.MyNameSpace


#region Teacher #region Teacher


static void tUpdateInfo(string sqlStr, out bool final, out string eMessage)
static void tUpUsrCosInfo(string sqlStr, out bool final, out string eMessage)
{ {
final = false; final = false;
eMessage = null; eMessage = null;

string str = "select * from usercourse_info where " + sqlStr; string str = "select * from usercourse_info where " + sqlStr;
MySqlConnection conn = new MySqlConnection(); MySqlConnection conn = new MySqlConnection();
try try
@@ -326,10 +407,10 @@ namespace StuMgmLib.MyNameSpace
if (cmd.ExecuteNonQuery() > 0) if (cmd.ExecuteNonQuery() > 0)
final = true; final = true;
} }
catch (MySqlException e)
catch (MySqlException MySqlE)
{ {
eMessage = e.Message;
Debug.Print(e.Message); // 可以去掉
eMessage = MySqlE.Message;
Debug.Print(DateTime.Now + " : " + MySqlE.Message);
} }
finally finally
{ {
@@ -343,9 +424,5 @@ namespace StuMgmLib.MyNameSpace


#endregion #endregion




} }


} }

+ 25
- 30
StuMgmServer/StuMgmLib/MyNameSpace/TcpConn.cs 查看文件

@@ -11,13 +11,13 @@ using System.Windows.Forms;


namespace StuMgmLib.MyNameSpace namespace StuMgmLib.MyNameSpace
{ {
// 还有一种验证连接方式: Token
public class TcpConn public class TcpConn
{ {
public EndPoint Ep; public EndPoint Ep;
private IPEndPoint ipp = null;
private Socket socket = null;
private Socket socketClient = null;
public Socket socketClient;

private IPEndPoint ipp;
private Socket socket;


private bool my_SocketExist = false; private bool my_SocketExist = false;
/// <summary> /// <summary>
@@ -43,7 +43,9 @@ namespace StuMgmLib.MyNameSpace
cb.Items.Add("127.0.0.1"); cb.Items.Add("127.0.0.1");
} }


#region 开启服务器
/// <summary>
/// 开服务器
/// </summary>
public void OpenServer(string ipAddr, int port) public void OpenServer(string ipAddr, int port)
{ {
ipp = new IPEndPoint(IPAddress.Parse(ipAddr), port); ipp = new IPEndPoint(IPAddress.Parse(ipAddr), port);
@@ -52,20 +54,19 @@ namespace StuMgmLib.MyNameSpace
socket.Listen(0); socket.Listen(0);
SocketExist = true; SocketExist = true;
} }
#endregion


#region 关闭服务器
/// <summary>
/// 关服务器
/// </summary>
public void CloseServer() public void CloseServer()
{ {
SocketExist = false;
if (socketClient != null) if (socketClient != null)
socketClient.Close(); socketClient.Close();
if (socket != null) if (socket != null)
socket.Close(); socket.Close();
SocketExist = false;
} }
#endregion


#region 接收客户端连接
/// <summary> /// <summary>
/// 接收客户端连接 /// 接收客户端连接
/// </summary> /// </summary>
@@ -78,43 +79,37 @@ namespace StuMgmLib.MyNameSpace
} }
catch (SocketException se) catch (SocketException se)
{ {
Debug.Print(se.Message);
Debug.Print(DateTime.Now + " : " + se.Message);
} }
} }
#endregion


const int recvTimeOut = -1; // 设置接收超时时间
private int recvTimeOut = 2000;
public int RecvTimeOut // 设置接收超时时间
{
get { return recvTimeOut; }
set { recvTimeOut = value; }
}
const int recvLength = 65535; const int recvLength = 65535;
#region 接收数据
/// <summary> /// <summary>
/// 接收数据 /// 接收数据
/// </summary> /// </summary>
public void AcpMsg()
public byte[] AcceptMsg()
{ {
byte[] clientSend = new byte[recvLength]; // 定义接收数组
byte[] clientSend = new byte[recvLength];
try try
{ {

socketClient.ReceiveTimeout = recvTimeOut;
socketClient.ReceiveTimeout = RecvTimeOut;
socketClient.Receive(clientSend); socketClient.Receive(clientSend);

byte[] serverSend = SystemCtrl.CreateServerResponse(clientSend);

if (serverSend != null)
socketClient.Send(serverSend);

}
catch (SocketException se) // 客户端断开连接
{
Debug.Print(se.Message);
return clientSend;
} }
finally
catch (Exception e) // 客户端断开连接
{ {
Debug.Print(DateTime.Now + " : " + e.Message);
if (socketClient != null) if (socketClient != null)
socketClient.Close(); socketClient.Close();
return null;
} }
} }
#endregion


} }
} }

+ 0
- 1
StuMgmServer/StuMgmServer/Program.cs 查看文件

@@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;


namespace StuMgmServer namespace StuMgmServer


+ 27
- 22
StuMgmServer/StuMgmServer/Server.cs 查看文件

@@ -2,6 +2,7 @@
using System.Threading; using System.Threading;
using System.Windows.Forms; using System.Windows.Forms;
using StuMgmLib.MyNameSpace; using StuMgmLib.MyNameSpace;
using System.Diagnostics;


namespace StuMgmServer namespace StuMgmServer
{ {
@@ -19,9 +20,8 @@ namespace StuMgmServer
{ {
tcpConn.GetIPAddress(cbxIPAddr); tcpConn.GetIPAddress(cbxIPAddr);
} }
/// <summary>
/// 委托:更新界面方法
/// </summary>

// 委托:更新界面
private void setText(string text) private void setText(string text)
{ {
if (rtxHistory.InvokeRequired) if (rtxHistory.InvokeRequired)
@@ -35,9 +35,7 @@ namespace StuMgmServer
} }
} }


/// <summary>
/// btn开关点击事件:开启、关闭服务器
/// </summary>
// 开启、关闭服务器
private void btnSerSwitch_Click(object sender, EventArgs e) private void btnSerSwitch_Click(object sender, EventArgs e)
{ {
bool sFlag = tcpConn.SocketExist; bool sFlag = tcpConn.SocketExist;
@@ -63,21 +61,28 @@ namespace StuMgmServer
} }
} }


/// <summary>
/// 线程:接收客户端连接,接收数据,数据处理;更新历史界面
/// </summary>
// 线程:接收客户端连接,接收数据,数据处理;更新历史界面
private void updateHistory() private void updateHistory()
{ {
while (tcpConn.SocketExist) while (tcpConn.SocketExist)
{ {
tcpConn.AcceptConn();
setText(DateTime.Now.ToLongTimeString() + " : " + tcpConn.Ep.ToString() + " 建立连接 \n");
tcpConn.AcpMsg();
setText(DateTime.Now.ToLongTimeString() + " : " + tcpConn.Ep.ToString() + " 断开连接 \n");
try
{
tcpConn.AcceptConn();
setText(DateTime.Now.ToLongTimeString() + " : " + tcpConn.Ep.ToString() + " 建立连接 \n");
byte[] serverSend = SystemCtrl.CreateServerResponse(tcpConn.AcceptMsg());
if (serverSend != null)
tcpConn.socketClient.Send(serverSend);
tcpConn.socketClient.Close();
setText(DateTime.Now.ToLongTimeString() + " : " + tcpConn.Ep.ToString() + " 断开连接 \n");
}
catch (Exception e)
{
Debug.Print(DateTime.Now + " : " + e.Message);
}
} }
} }



private void Server_Load(object sender, EventArgs e) private void Server_Load(object sender, EventArgs e)
{ {
tcpConn.GetIPAddress(cbxIPAddr); tcpConn.GetIPAddress(cbxIPAddr);
@@ -85,15 +90,15 @@ namespace StuMgmServer


private void Server_FormClosing(object sender, FormClosingEventArgs e) private void Server_FormClosing(object sender, FormClosingEventArgs e)
{ {
//DialogResult dr = MessageBox.Show("确认退出程序?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
//if (dr != DialogResult.Yes)
System.Environment.Exit(0);

DialogResult dr = MessageBox.Show("确认退出程序?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr != DialogResult.Yes)
e.Cancel = true;
else
{
if (tUpdateUi != null)
tUpdateUi.Abort();
}
} }






} }
} }

正在加载...
取消
保存