C# Socket通讯

服务器端

class SocketServer
    {
        public static Socket mySocket;
        private static int port = 8885;   //端口  
        private static byte[] receive = new byte[1024];//接收的信息
        
//private static byte[] send = new byte[1024];//发送的信息

        public static string receiveStr = "";

        public static void ServerMain()
        {

            //IPAddress ip = SocketServer.GetHostIP();

            IPAddress ip = SocketServer.GetHostIP();//IPAddress.Parse("127.0.0.1");
            mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            mySocket.Bind(new IPEndPoint(ip, port));//绑定IP地址:端口
            mySocket.Listen(5); //设定最多的连接请求为10个

            Thread myThread = new Thread(BeginListen);
            myThread.Start();


        }
        /// <summary>   
        
/// 监听客户端连接   
        
/// </summary> 
        public static void BeginListen()
        {
            while (true)
            {
                //result = Encoding.ASCII.GetBytes(SocketServer.GetLiqLevel().ToString());
                Socket clientSocket = mySocket.Accept();
                clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));

                Thread receiveThread = new Thread(ReceiveReq);
                receiveThread.Start(clientSocket);
            }

        }

        //从客户端接收消息
        public static void ReceiveReq(object clientSociket)
        {
            
            while (true)
            {
                Socket myclientSociket = (Socket)clientSociket;
                try
                {
                   int receiveNumber = myclientSociket.Receive(receive);

                   if (receiveNumber > 0)
                   {
                       receiveStr = Encoding.Default.GetString(receive);//接收到客户端的信息
                       MessageBox.Show(receiveStr, GlobalUserClass.strCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                       //IPAddress ip = SocketServer.GetHostIP();
                       
//string ip = myclientSociket.RemoteEndPoint.ToString();
                       IPAddress ip = ((IPEndPoint)myclientSociket.RemoteEndPoint).Address;
                       
                       string sendMessage = "The Client's IP is:" + Convert.ToString(ip.ToString());//"这是返回你要查询的信息";
                       myclientSociket.Send(Encoding.Unicode.GetBytes(sendMessage));

                   }
                       

                }
                catch
                {
                    //myclientSociket.Close();
                    return;
                }
            }
        }

        //向客户端回馈信息
        public static void SendMessage()
        { 
        
        }
        public static IPAddress GetHostIP()
        {
            IPHostEntry ipe = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ip = ipe.AddressList[0];

            return ip;
        }
        
        /// <summary>
        
/// 获取本地IP地址C#方法
        
/// </summary>
        
/// <returns></returns>
        private String GetIPAddress()
        {
            String str;
            String Result = "";
            String hostName = Dns.GetHostName();
            IPAddress[] myIP = Dns.GetHostAddresses(hostName);
            foreach (IPAddress address in myIP)
            {
                str = address.ToString();
                for (int i = 0; i < str.Length; i++)
                {
                    if (str[i] >= '0' && str[i] <= '9' || str[i] == '.') Result = str;
                }
            }
            return Result;
            
        }

    }

 

客户端

       //从服务器端查询相关信息
        private void btnFind_Click(object sender, EventArgs e)
        {

            Thread.Sleep(1000);
            // 生成一个TCP/IP socket.
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            SocketCliMain();

            //LiquidLevel = Convert.ToDouble(ReceiveData.ToString());
            
//txtLiqLevel = LiquidLevel.ToString();

        }
        private static byte[] result = new byte[1024];
        private static byte[] Rece = new byte[1024];

        private void SocketCliMain()
        {

            int port = 8885;
            IPAddress ServeIP = IPAddress.Parse("127.0.0.1");//服务器的IP

            IPEndPoint remoteEP = new IPEndPoint(ServeIP, port);
                  Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                clientSocket.Connect(remoteEP);
                //MessageBox.Show("连接服务器成功!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch
            { 
                MessageBox.Show("与主站建立连接失败!""提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            //从服务器接收连接的应答信息   
            int receiveLength = 0;
            receiveLength = clientSocket.Receive(result);
            //string str = Encoding.Default.GetString(result);
            string strin = "";
            strin = Convert.ToString(Encoding.ASCII.GetString(result));//.Substring(0,receiveLength);


            if (receiveLength > 0)
            { 
                //向服务器发送相关的数据信息
                string sendMessage = "client send Message To Server";
                clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
            }
            if (receiveLength == 0)
            {
                MessageBox.Show("连接服务器失败!""提示信息",  MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            int receiveNumber = 0;
            receiveNumber = clientSocket.Receive(Rece);
            string receiveString = "";
            bool flt = false;
            if (receiveNumber > 0)
            {
                receiveString = Convert.ToString(Encoding.Unicode.GetString(Rece)); //Encoding.ASCII.GetString(result);
                
//receiveString = Encoding.Default.GetString(result);
                flt = true;
            }
            if (receiveNumber == 0)
            {
                MessageBox.Show("服务器传送数据失败!""提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            if (flt)
            {
                MessageBox.Show(receiveString, "提示信息",MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //clientSocket.Close();
               
            }

 

 

posted @ 2013-05-08 21:48  蓝色L火焰  阅读(441)  评论(0编辑  收藏  举报