/// <summary> /// //主动发送学生的IP和姓名 发一次 /// </summary> /// <param name="serverIp"></param> /// <param name="onlineUser"></param> private void sendLoaclInfo(Socket socketSend, OnlineUser onlineUser) { MemoryStream mStream = new MemoryStream(); BinaryFormatter bformatter = new BinaryFormatter(); //二进制序列化类 bformatter.Serialize(mStream, onlineUser); //将消息类转换为内存流 mStream.Flush(); byte[] buffer = new byte[1024]; mStream.Position = 0; //将流的当前位置重新归0,否则Read方法将读取不到任何数据 while (mStream.Read(buffer, 0, buffer.Length) > 0) { socketSend.Send(buffer); //从内存中读取二进制流,并发送 } }
/// <summary> /// 窗体控件加载完毕后 处理一些事务 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainFrame_Load(object sender, EventArgs e) { Thread t = new Thread(new ThreadStart(RecvThread)); t.IsBackground = true; t.Start(); p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.CreateNoWindow = true; //connectBluetooth();//连接串口蓝牙 //只要不是老师你就要进去后搜索是否有语音邀请对话 if (LoginRoler.roleid != Constant.RoleTeacher) { Initialize(); } if (LoginRoler.isLocalIp) { //创建 服务器 负责监听的套接字 参数(使用IP4寻址协议,使用流式连接,使用TCP传输协议) socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //获取IP地址 IPAddress ip = IPAddress.Parse(LoginRoler.ip); //创建 包含IP和Port的网络节点对象 IPEndPoint endPoint = new IPEndPoint(ip, int.Parse("10021")); //将负责监听 的套接字 绑定到 唯一的IP和端口上 socketServer.Bind(endPoint); //设置监听队列 一次可以处理的最大数量 socketServer.Listen(10); //创建线程 负责监听 threadWatchInfo = new Thread(WatchConnectionInfo); //设置为后台线程 threadWatchInfo.IsBackground = true; //开启线程 threadWatchInfo.Start(); //创建线程 负责监听 // threadWatch = new Thread(WatchConnection); //设置为后台线程 // threadWatch.IsBackground = true; //开启线程 //threadWatch.Start(); //Console.WriteLine("=====================服 务 器 启 动 成 功该Socekt用来通信聊天室用户的信息更新======================"); } else { //获取老师服务IP string serverIp = LoginRoler.serverIp; //学生则创建连接客户端的操作 //获取IP IPAddress ip = IPAddress.Parse(serverIp); //新建一个网络节点 IPEndPoint endPoint = new IPEndPoint(ip, int.Parse("10021")); //新建一个Socket 负责 监听服务器的通信 socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //连接远程主机 socketClient.Connect(endPoint); //主动发送学生的IP和姓名 发一次 OnlineUser onlineUser = new OnlineUser(); onlineUser.ChatIp = LoginRoler.ip; onlineUser.ChatName = LoginRoler.username; sendLoaclInfo(socketClient, onlineUser); //该线程用来接收教师机发送过来的最新聊天室名单IP recvthreadWatch = new Thread(new ThreadStart(recvWatchConnection)); recvthreadWatch.IsBackground = true; recvthreadWatch.Start();//可能有并发请求,所以消息的接收也需要在子线程中处理 //打印输出 //Console.WriteLine("=====================服 务 器 连 接 成 功Socekt用来通信聊天室用户的信息更新======================"); } }