Esempio n. 1
0
 /// <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); //从内存中读取二进制流,并发送
     }
 }
Esempio n. 2
0
        /// <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用来通信聊天室用户的信息更新======================");
            }
        }