示例#1
0
文件: Netcom.cs 项目: KugaChan/KCOM
 void Func_NetCom_SendData(string str)
 {
     if (netcom_is_connected == true)
     {
         if (str.Length == 0)
         {
             MessageBox.Show("Empty send length!" + DebugIF.GetStack(), "Error!");
         }
         else
         {
             if (Parameter.netcom_is_server == true)                   //服务器往客户端发送
             {
                 try
                 {
                     bw_server_write_to_client.Write(str);
                 }
                 catch (Exception ex)
                 {
                     if (netcom_is_connected == true)
                     {
                         MessageBox.Show(ex.Message, "Client lost, Write Fail!");
                         Func_Server_Close();
                     }
                 }
             }
             else                                                                        //客户端往服务器端发送
             {
                 try
                 {
                     bw_client_write_to_server.Write(str);                                               //向服务器发送字符串
                 }
                 catch (Exception ex)
                 {
                     if (netcom_is_connected == true)
                     {
                         MessageBox.Show(ex.Message, "Server lost, Write Fail!");
                         Func_Clint_Close();
                     }
                 }
             }
         }
     }
 }
示例#2
0
文件: Netcom.cs 项目: KugaChan/KCOM
        void button_NetRun_Click(object sender, EventArgs e)
        {
            if (first_run_init_done == false)
            {
                first_run_init_done = true;

                /**********************创建线程****************************/
                string strInfo = string.Empty;
                thread_net = new Thread(ThreadEntry_Net);                                       //实例化Thread线程对象

                strInfo  = "\nThe managed Thread ID:" + thread_net.ManagedThreadId;
                strInfo += "\nThread Name:" + thread_net.Name;
                strInfo += "\nThread State:" + thread_net.ThreadState.ToString();
                strInfo += "\nThread Priority:" + thread_net.Priority.ToString();
                strInfo += "\nIs Backgroud" + thread_net.IsBackground;
                Console.WriteLine(strInfo);

                thread_net.IsBackground = true; //设置为后台程序,它的主线程结束,它也一起结束
                thread_net.Start();             //启动线程
                /**********************创建线程****************************/
            }

            if (netcom_is_connected == false)
            {
                String IP_Str = "";

                IP_Str = textBox_IP1.Text + "." + textBox_IP2.Text + "." + textBox_IP3.Text + "." + textBox_IP4.Text;

                //服务器:真正串口要接收东西的那个
                //textBox_Netcom.Text += "Server is listening...\r\n";
                if (Parameter.netcom_is_server == true)
                {
                    textBox_ComRec.Text += "Waiting for the Client...\r\n";

                    IPEndPoint localEP = new IPEndPoint(IPAddress.Parse(IP_Str), 6666);                     //本地端地址
                    Listener = new TcpListener(localEP);                                                    //建立监听类,并绑定到指定的端地址

                    try
                    {
                        Listener.Start();                                                           //开始监听
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error local IP setup!");
                        return;
                    }

                    s32 minute_mark;
                    s32 second_mark;
                    s32 listener_pending_mark;
                    s32 listener_pending_timeout;

                    minute_mark           = DateTime.Now.Minute;
                    second_mark           = DateTime.Now.Second;
                    listener_pending_mark = minute_mark * 60 + second_mark;

                    while (true)
                    {
                        if (Listener.Pending() == false)
                        {
                            //为了避免每次都被tcpListener.AcceptTcpClient()阻塞线程,添加了此判断,
                            //no connection requests have arrived
                            //当没有连接请求时,什么也不做,有了请求再执行到tcpListener.AcceptTcpClient()

                            minute_mark = DateTime.Now.Minute;
                            second_mark = DateTime.Now.Second;
                            listener_pending_timeout = minute_mark * 60 + second_mark;
                            //Console.WriteLine("listener pending{0}:{1}....", listener_pending_mark, listener_pending_timeout);
                            if (listener_pending_timeout - listener_pending_mark >= 10)
                            {
                                textBox_ComRec.Text += "Can't find any client" + "\r\n";
                                MessageBox.Show("Can't find any client" + DebugIF.GetStack(), "Attention!");

                                Listener.Stop();
                                return;
                            }
                        }
                        else
                        {
                            remoteClient = Listener.AcceptTcpClient();                                          //等待连接(阻塞)

                            network_stream_server      = remoteClient.GetStream();
                            br_server_read_from_client = new BinaryReader(network_stream_server);
                            bw_server_write_to_client  = new BinaryWriter(network_stream_server);

                            textBox_ComRec.Text += "Client connect successfully!\r\nClient:"                               //打印客户端连接信息;
                                                   + remoteClient.Client.RemoteEndPoint.ToString() + "\r\n";

                            break;
                        }
                    }
                }
                else
                {
                    IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(IP_Str), 6666);                        //远程服务器端地址;
                    remoteServer = new TcpClient();

                    try
                    {
                        remoteServer.Connect(remoteEP);                                                 //调用connect方法连接远端服务器;
                    }
                    catch (Exception ex)
                    {
                        textBox_ComRec.Text += "Can't connect to server:" + IP_Str + "\r\n";
                        MessageBox.Show("Can't connect to server:" + IP_Str + "\r\n" + ex.Message, "Warning");
                        return;
                    }

                    network_stream_client      = remoteServer.GetStream();
                    bw_client_read_from_server = new BinaryReader(network_stream_client);
                    bw_client_write_to_server  = new BinaryWriter(network_stream_client);

                    textBox_ComRec.Text += "Connect to server successfully:" + IP_Str + "\r\n";
                    Console.WriteLine("I'm using {0}.", remoteServer.Client.LocalEndPoint);                     //打印自己使用的端地址;
                }

                netcom_is_connected = true;
                button_NetRun.Text  = "Break the NetCom";
            }
            else
            {
                //客户端等待服务器数据
                if (Parameter.netcom_is_server == false)
                {
                    Func_Clint_Close();
                }
                else    //服务器等待客户端数据
                {
                    Func_Server_Close();
                }

                MessageBox.Show("Break the NetCom" + DebugIF.GetStack(), "Warning!");
            }
        }