C#通讯编程--《银证转帐系统》的通信代码

koobee学生在校写的《银证转帐系统》的通信代码

+展开
-C#
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 
using System.Windows.Forms; 
using System.IO; 
using System.Data.SqlClient; 

namespace SERVERsocket 

    class SERVER 
    { 
        private Thread serverThread; 
        private Thread recvThread; 
        private TcpListener tcpListener; 
        private NetworkStream networkStream; 
        private StreamReader streamReader; 
        private StreamWriter streamWriter; 
        private Socket socketForClient; 
        private string message; 
        private int operatorNO; 
        private bool[] isOperated; 

        private void Listen() 
        { 
            try 
            { 
                Int32 port = Int32.Parse("2020"); 
                IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0]; 
                tcpListener = new TcpListener(IPAddress.Any, port); 
                //开始侦听 
                tcpListener.Start(); 
              //返回可以用以处理连接的Socket实例 
                socketForClient = tcpListener.AcceptSocket(); 
                if (socketForClient.Connected) 
                {                    
                    networkStream = new NetworkStream(socketForClient); 
                    streamReader = new StreamReader(networkStream); 
                    streamWriter = new StreamWriter(networkStream); 
                    recvThread = new Thread(new ThreadStart(RecvData)); 
                    recvThread.Start(); 
                } 
                MessageBox.Show("客户端成功连接上服务器!"); 
            } 

            catch (Exception exc) 
            { 
                MessageBox.Show(exc.Message, "Server提示"); 
            } 
        } 

        //接收数据 
        private void RecvData() 
        { 
            string msg = streamReader.ReadLine(); 
            string[] tokens = msg.Split(new char[] { '#' }); 
            //MessageBox.Show(tokens[0]); 
            //MessageBox.Show(tokens[1]); 
            //MessageBox.Show(tokens[2]); 

            while (!msg.Equals("clientExit")) 
            { 
                switch (tokens[0]) 
                { 
                    case "c01"
                        { 
                            //MessageBox.Show("开始登陆!"); 
                            //下面写SQL语句,查询对应的帐户密码是否正确,并返回信息 
                            SqlConnection thisConnection = new SqlConnection("server = localhost;Integrated Security =true;database = security"); 
                            SqlCommand comn = new SqlCommand("select 密码 from 帐户表 where 账号=" + tokens[1], thisConnection); 
                            thisConnection.Open(); 
                            SqlDataAdapter thisAdapt = new SqlDataAdapter("select * from 帐户表", thisConnection); 
                            DataSet thisDataSet = new DataSet(); 
                            thisAdapt.Fill(thisDataSet, "帐户表"); 
                            string s = comn.ExecuteScalar().ToString(); 


                            // MessageBox.Show(s); 
                            // MessageBox.Show(tokens[2]); 


                            if (s.CompareTo(tokens[2]) == 0) 
                            { 
                                streamWriter.Write("1"); 
                                streamWriter.Flush(); 
                                tokens[0].Remove(0); 
                              //  MessageBox.Show("登陆消息已发送"); 
                            } 
                            else 
                            { 
                                streamWriter.Write("1"); 
                                streamWriter.Flush(); 
                                tokens[0].Remove(0); 
                              // MessageBox.Show("登陆"); 
                            } 

                        } 
                        break


                    case "c02"
                        { 
                            //下面写SQL语句,查询对应账户的余额,并返回信息 
                            SqlConnection thisConnection = new SqlConnection("server = localhost;Integrated Security =true;database = security;"); 
                            SqlDataAdapter thisAdapt = new SqlDataAdapter("select * from 帐户表", thisConnection); 
                            SqlCommandBuilder thisbuider = new SqlCommandBuilder(thisAdapt); 
                            SqlCommand thisCommand = thisConnection.CreateCommand(); 
                            thisConnection.Open(); 
                            DataSet thisDataSet = new DataSet(); 
                            thisAdapt.Fill(thisDataSet, "帐户表"); 
                            string s1 = "select 金额 from 帐户表 where 账号=" + tokens[1]; 
                            setMessage("c002#" + s1);        //填写账户余额 
                            SendData(); 
                            tokens[0].Remove(0); 
                        } 
                        break
                    case "c03"
                        { 
                            //更改帐户密码的sql语句,完成后返回数据003成功 
                            SqlConnection thisConnection = new SqlConnection("server = localhost;Integrated Security =true;database = security;"); 
                            SqlDataAdapter thisAdapt = new SqlDataAdapter("select * from 帐户表", thisConnection); 
                            SqlCommandBuilder thisbuider = new SqlCommandBuilder(thisAdapt); 
                            SqlCommand thisCommand = thisConnection.CreateCommand(); 
                            thisConnection.Open(); 
                            DataSet thisDataSet = new DataSet(); 
                            thisAdapt.Fill(thisDataSet, "帐户表"); 
                            foreach (DataRow rows in thisDataSet.Tables["帐户表"].Rows) 
                            { 

                                string s1 = "select 密码 from 帐户表 where 账号=" + tokens[1]; 
                                if (s1.CompareTo(tokens[1]) == 0) 
                                { 
                                    thisCommand.CommandText = "update 帐户表 set 密码 = " + tokens[3] + "where 账号=" + tokens[1]; 
                                    setMessage("c003#1");        //修改密码成功 
                                    SendData(); 
                                    tokens[0].Remove(0); 
                                } 
                                else 
                                { 
                                    setMessage("c003#2");        //修改密码失败 
                                    SendData(); 
                                    tokens[0].Remove(0); 
                                } 
                            } 
                        } 
                        break
case "c04"
                        { 
                            operatorNO = Int32.Parse(tokens[1]); 
                            if (isOperated[operatorNO])    //这句要查下,c#中的bool初始值是什么?true还是false 
                            { 

                                SendData(); 
                                isOperated[operatorNO] = true;          //将“已操作”标记设置为true 
                            } 
                            else 
                            { 
                                //执行转账操作的SQL语句,完成后并返回信息 
                                SqlConnection thisConnection = new SqlConnection("server = localhost;Integrated Security =true;database = security;"); 
                                SqlDataAdapter thisAdapt = new SqlDataAdapter("select * from 帐户表", thisConnection); 
                                thisConnection.Open(); 
                                SqlCommand thisCommand = thisConnection.CreateCommand(); 
                                DataSet thisDataSet = new DataSet(); 
                                thisAdapt.Fill(thisDataSet, "帐户表"); 

                                string s2 = "select 金额 from 帐户表 where 账号=" + tokens[1]; 
                                string s3 = "select 金额 from 帐户表 where 账号=" + tokens[1]; 

                                if (s2.CompareTo(tokens[3]) < 0) 
                                    setMessage("c004#1"); 
                                else if (s3 == null
                                    setMessage("c004#2"); 
                                else 
                                { 
                                    foreach (DataRow rows in thisDataSet.Tables["帐户表"].Rows) 
                                    { 
                                        if (rows["账号"].ToString() == tokens[1]) 
                                            thisCommand.CommandText = "update 帐户表 set 金额 = 金额 -" + tokens[3] + "where 账号=" + tokens[1]; 
                                        if (rows["账号"].ToString() == tokens[2]) 
                                            thisCommand.CommandText = "update 帐户表 set 金额 = 金额 +" + tokens[3] + "where 账号=" + tokens[2]; 
                                    } 

                                    setMessage("c004#3"); 
                                } 
                                SendData(); 
                                tokens[0].Remove(0); 

                                isOperated[operatorNO] = true//将“已操作”标记设置为true 

                            } 

                        } 
                        break
                    case "c05"
                        { 
                            operatorNO = Int32.Parse(tokens[1]); 
                            if (isOperated[operatorNO])    //这句要查下,c#中的bool初始值是什么?true还是false 
                            { 
                                SendData(); 
                                isOperated[operatorNO] = true;          //将“已操作”标记设置为true 
                            } 
                            else 
                            { 
                                //执行转账操作的SQL语句,完成后并返回信息 
                                
                            } 
                                SendData(); 
                                tokens[0].Remove(0); 

                                isOperated[operatorNO] = true//将“已操作”标记设置为true 
                        } 
                        break;                      
                } 
                msg = streamReader.ReadLine();                      
                
            }            
                MessageBox.Show("一名客户退出"); 
                ReleaseResource(); 
                startServer();          
        } 

        public void setMessage(string message) 
        { 
            this.message = message; 
        } 

        private void SendData() 
        { 
            streamWriter.Write(message); 
            streamWriter.Flush(); 
            
            //streamWriter.Close(); 
        } 

        private void ReleaseResource() 
        { 
            if (networkStream != null
            { 
                networkStream.Close(); 
                streamReader.Close(); 
                streamWriter.Close(); 
                socketForClient.Shutdown(SocketShutdown.Both); 
                socketForClient.Close(); 
                tcpListener.Stop(); 
            } 
            
        } 

        public void startServer() 
        { 
            serverThread = new Thread(new ThreadStart(Listen)); 
            serverThread.Start(); 
        } 

        public void serverExit() 
        { 
            string exitMsg = "serverExit"//要退出时,发送exit信息给服务器 
            setMessage(exitMsg); 
            SendData(); 
            ReleaseResource(); 
        } 
    } 


+展开
-C#
public partial class BankClient 
    { 

        private NetworkStream networkStream; 
        private StreamReader streamReader; 
        private StreamWriter streamWriter; 
        private TcpClient myclient; 
        private Thread recvThread; 
        private Thread sendThread; 
        private Thread serverThread; 
        private bool flag = true

        private void Connection() 
        { 
            try 
            { 
                Int32 port = 8888; 
                myclient = new TcpClient("10.1.1.10", port); 
            } 
            catch 
            { 
                MessageBox.Show("没有连接到银行服务器!"); 
            } 

            networkStream = myclient.GetStream(); 
            streamReader = new StreamReader(networkStream); 
            streamWriter = new StreamWriter(networkStream); 

  //          recvThread = new Thread(new ThreadStart(RecvData)); 
    //        recvThread.Start(); 
            MessageBox.Show("连接到银行服务器!"); 
            
        } 

        private void RecvData() 
        { 
          
            string s = streamReader.ReadLine(); 
            string[] tokens = s.Split(new char[] { '#' }); 
      

            while (!s.Equals("severExit")) 
            { 
                if (tokens[0] == "1"
                { 
                    SqlConnection thisConnection = new SqlConnection("server = localhost;Integrated Security = true;database = security;"); 
                    SqlDataAdapter thisAdapt = new SqlDataAdapter("select * from 转账接口表", thisConnection); 
                    SqlCommandBuilder thisbuider = new SqlCommandBuilder(thisAdapt); 
                    SqlCommand thisCommand = thisConnection.CreateCommand(); 
                    DataSet thisSet = new DataSet(); 
                    thisAdapt.Fill(thisSet, "转账接口表"); 
                    thisConnection.Open(); 
                    // thisCommand.CommandText = "update 转账接口表 set 标志位 = 3" + "where 转账序号=" + tokens[1]; 
                    thisCommand.CommandText = "delete from 转账接口表 where 转账序号=" + tokens[1]; 
                    thisCommand.ExecuteNonQuery(); 
                    flag = true
                    
                } 
                else flag = false
                s = streamReader.ReadLine(); 
            } 

            ReleaseResouce(); 
        } 

        private void SendData() 
        { 
            SqlConnection thisConnection = new SqlConnection("server = localhost;Integrated Security = true;database = security;"); 
            SqlDataAdapter thisAdapt = new SqlDataAdapter("select * from 转账接口表", thisConnection); 
            SqlCommandBuilder thisbuider = new SqlCommandBuilder(thisAdapt); 
            SqlCommand thisCommand = thisConnection.CreateCommand(); 
            DataSet thisSet = new DataSet(); 
            thisAdapt.Fill(thisSet, "转账接口表"); 
            thisConnection.Open(); 
            foreach (DataRow rows in thisSet.Tables["转账接口表"].Rows) 
            { 
                if (rows["标志位"].ToString() == "1"
                { 
                    string s; 
                    s = rows["转账序号"].ToString() + '#' + rows["发起端账号"].ToString() + '#' + rows["接收端账号"].ToString() + '#' + rows["发生金额"] + '#' + rows["标志位"].ToString(); 

                    if (flag) 
                    { 
                        streamWriter = new StreamWriter(networkStream); 
                        streamWriter.WriteLine(s); 
                        streamWriter.Flush(); 
                        System.Threading.Thread.Sleep(5000); 
                        
                    } 
                    else 
                    { 
                        //将数据读入资金变更表 
                        thisCommand.CommandText = "delete from 转账接口表 where 标志位= '3'"
                    } 
                } 
            } 

        } 

        private void ReleaseResouce() 
        { 
            networkStream.Close(); 
            streamReader.Close(); 
            streamWriter.Close(); 
            sendThread.Abort(); 
            //serverThread.Abort(); 
            myclient.Close(); 
        } 

        public  void startBankClient( ) 
        { 
            serverThread = new Thread(new ThreadStart(Connection)); 
            serverThread.Start(); 
            int row = 0; 
            SqlConnection thisConnection = new SqlConnection("server = localhost;Integrated Security = true;database = security;"); 
            SqlDataAdapter thisAdapt = new SqlDataAdapter("select * from 转账接口表", thisConnection); 
            SqlCommandBuilder thisbuider = new SqlCommandBuilder(thisAdapt); 
            DataSet thisSet = new DataSet(); 
            thisAdapt.Fill(thisSet, "转账接口表"); 
            while (true
            { 
                foreach (DataRow rows in thisSet.Tables["转账接口表"].Rows) 
                { 
                    row++; 
                } 

                if (row > 0) 
                { 
                    SendData(); 
                    RecvData(); 
                } 
                System.Threading.Thread.Sleep(5000); 

            } 
        } 

        public void exitBankClient( ) 
        { 
            streamWriter.Flush(); 
            ReleaseResouce(); 

        } 
    } 


(福建师范大学软件学院)

加支付宝好友偷能量挖...


评论(0)网络
阅读(99)喜欢(0)Asp.Net/C#/WCF