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

本文详细阐述了服务器客户端交互过程及实现转账操作的步骤,包括登录验证、账户信息查询、转账请求处理等关键环节。
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(); 
        
    

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(); 
 
        
    
 
  (福建师范大学软件学院)

基于粒子群优化算法的p-Hub选址优化(Matlab代码实现)内容概要:本文介绍了基于粒子群优化算法(PSO)的p-Hub选址优化问题的研究与实现,重点利用Matlab进行算法编程和仿真。p-Hub选址是物流与交通网络中的关键问题,旨在通过确定最优的枢纽节点位置和非枢纽节点的分配方式,最小化网络总成本。文章详细阐述了粒子群算法的基本原理及其在解决组合优化问题中的适应性改进,结合p-Hub中转网络的特点构建数学模型,并通过Matlab代码实现算法流程,包括初始化、适应度计算、粒子更新与收敛判断等环节。同时可能涉及对算法参数设置、收敛性能及不同规模案例的仿真结果分析,以验证方法的有效性和鲁棒性。; 适合人群:具备一定Matlab编程基础和优化算法理论知识的高校研究生、科研人员及从事物流网络规划、交通系统设计等相关领域的工程技术人员。; 使用场景及目标:①解决物流、航空、通信等网络中的枢纽选址与路径优化问题;②学习并掌握粒子群算法在复杂组合优化问题中的建模与实现方法;③为相关科研项目或实际工程应用提供算法支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐段理解算法实现逻辑,重点关注目标函数建模、粒子编码方式及约束处理策略,并尝试调整参数或拓展模型以加深对算法性能的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值