当前位置:编程学习 > C#/ASP.NET >>

帮我改下,c#的多客户端socket没做过,不知道怎么搞

新手,还望见谅
服务端

 private const int BufferSize = 1024;
        private TcpListener listener;
        private DataControl dc;
        private SQLHelper sh;
        private TcpClient remoteclient;
        private DateTime time = DateTime.Now.ToLocalTime();
        private delegate void threadTell();
        private delegate void threadworkcontorl();
        public Form1()
        {
            InitializeComponent();
            t.TextAlign = HorizontalAlignment.Left;
            dc = new DataControl();
            sh = new SQLHelper();
        }

        private string getBindIp() 
        {
            LocalIpConfig lic = new LocalIpConfig();
            return lic.getIpBind();
        }
        private int getBindPort() 
        {
            LocalIpConfig lic = new LocalIpConfig();
            return Convert.ToInt32(lic.getPortBind());
        }

        private void socket()
        {
            if (getBindIp() != null)
            {
                IPAddress ip = IPAddress.Parse(getBindIp());
                int port = getBindPort();
                listener = new TcpListener(ip, getBindPort());
                listener.Start(); // 开始侦听
                sh.getConnection();
                do
                {
                    Thread th = new Thread(new ThreadStart(invoke));
                    th.IsBackground = false;
                    th.Start();
                }while(true);

            }
            else 
            {
                MessageBox.Show("未设置服务器IP和绑定端口!");
            }
        }
        private void invoke() 
        {
            threadTell tt = new threadTell(threadwordk);
            this.BeginInvoke(tt);
        }
        private void workinvoke() 
        {
            threadworkcontorl tdk = new threadworkcontorl(workcontrol);
            this.BeginInvoke(tdk);
        }
        private void threadwordk()
        {
                remoteclient = listener.AcceptTcpClient();
                remoteclient.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true);
                Thread th2 = new Thread(new ThreadStart(workinvoke));
                th2.Start();
                //// 打印连接到的客户端信息
                //t.AppendText("client connected!server:" + remoteclient.Client.LocalEndPoint.ToString() + ",client:" + remoteclient.Client.RemoteEndPoint.ToString() + "\n");
                //// 获得流,并写入buffer中 
                //NetworkStream streamtoclient = remoteclient.GetStream();
                //byte[] buffer = new byte[BufferSize];
                //int bytesread = streamtoclient.Read(buffer, 0, BufferSize);
                //// 获得请求的字符串
                //string msg = Encoding.Unicode.GetString(buffer, 0, bytesread);
                //DataObj da = new DataObj();
                //da = dc.getDataObject(dc.getStr(msg)[0]);
                //t.AppendText("sitecode=" + da.Sitecode + "时间:" + time.ToString("yyyy-mm-dd") + "[" + time.ToString("hh:mm:ss") + "]");
                //if (sh.insertStream(da)) { t.AppendText("插入数据成功\n"); } else { t.AppendText("插入数据失败\n"); }
        }
        private void workcontrol() 
        {
            // 打印连接到的客户端信息
            t.AppendText("client connected!server:" + remoteclient.Client.LocalEndPoint.ToString() + ",client:" + remoteclient.Client.RemoteEndPoint.ToString() + "\n");
            // 获得流,并写入buffer中 
            NetworkStream streamtoclient = remoteclient.GetStream();
            byte[] buffer = new byte[BufferSize];
            int bytesread = streamtoclient.Read(buffer, 0, BufferSize);
            // 获得请求的字符串
            string msg = Encoding.Unicode.GetString(buffer, 0, bytesread);
            DataObj da = new DataObj();
            da = dc.getDataObject(dc.getStr(msg)[0]);
            t.AppendText("sitecode=" + da.Sitecode + "时间:" + time.ToString("yyyy-mm-dd") + "[" + time.ToString("hh:mm:ss") + "]");
            if (sh.insertStream(da)) { t.AppendText("插入数据成功\n"); } else { t.AppendText("插入数据失败\n"); }
        }
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            socket();
        }


帮帮忙 --------------------编程问答-------------------- 一个我经常参考的异步socket通信,看看
http://www.codeproject.com/KB/IP/AsyncSocketServerandClien.aspx

效果图:

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,