Socket初步使用

 *********************************************************

*客户端

*

**********************************************************

 private Socket c;

 private void client_Load(object sender, EventArgs e)
        {
            try
            {

                int port = 2000;//服务器端口号
                string host = "127.0.0.1";
                IPAddress ip = IPAddress.Parse(host);
                IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
                c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket

                ThreadStart ClientReciveData = new ThreadStart(ReciveData);//创建一个线程来循环接受来自服务端数据
                Thread MyThread = new Thread(ClientReciveData);
                MyThread.Start();

            }
            catch(Exception err)
            {
                throw;
            }
        }
        private void ReciveData()//接受信息
        {
           while (true)
            {
                Byte[] buffer = new Byte[1024];
                int bytes;
                string recvStr = "";

                bytes = c.Receive(buffer, buffer.Length, 0);//从客户端接受信息

                recvStr += Encoding.Default.GetString(buffer, 0, bytes);
                Invoke(new Action(delegate() {
                    rtb_msg.Text += (recvStr + "/n");//显示到richtextbox                    
                    rtb_msg.Focus();
                    rtb_msg.Select(rtb_msg.TextLength, 0);
                    rtb_sendMsg.Focus();
                }));
            }
        }

        private void btn_sendMsg_Click(object sender, EventArgs e)//发送信息按钮click事件
        {
            string sendStr = "client"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"/n"+rtb_sendMsg.Text;
            byte[] bs = Encoding.Default.GetBytes(sendStr);
            //if (c == null || !c.Connected)//判断socket类是否连接
            //{
            //    connect();
            //}
            c.Send(bs, bs.Length, 0);//发送测试信息
            //Socket sp_Msg = c;
            //sp_Msg.BeginSend(bs, 0, bs.Length, 0, new AsyncCallback(EndSendMsg), sp_Msg);
            //string recvStr = "";

            byte[] recvBytes = new byte[1024];
            //int bytes;
            //bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
            //recvStr += Encoding.Default.GetString(recvBytes, 0, bytes);
            rtb_msg.Text += (sendStr+"/n");
            rtb_sendMsg.Clear();
            rtb_msg.Focus();
            rtb_msg.Select(rtb_msg.TextLength, 0);
            rtb_sendMsg.Focus();
            //rtb_msg.Text += (recvStr+"/n");
            //c.Close();
        }
**********************************************************************

*服务端

***********************************************************************

        protected static Socket serverSocket;
        protected Socket clientSocket;
        protected Socket s;

private void btn_startServer_Click(object sender, EventArgs e)//启动服务
        {
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any,2000);
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            serverSocket.Bind(ipep);
            serverSocket.Listen(10);
           
            serverSocket.BeginAccept(new AsyncCallback(ReciveData), null);
            //serverSocket.
            socketState = true;
            lbl_state.Text = "服务已开启";           
        }       

        private void ReciveData(IAsyncResult asyn)
        {
                s = serverSocket.EndAccept(asyn);
                Byte[] buffer = new Byte[1024];
                int bytes;
                string recvStr = "";

                IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint;
                bytes = s.Receive(buffer, buffer.Length, 0);//从客户端接受信息

                recvStr += Encoding.Default.GetString(buffer, 0, bytes);
                Invoke(new Action(delegate()
                {
                    rtb_reciveMsg.Text += (recvStr + "/n");
                    rtb_reciveMsg.SelectionStart = rtb_reciveMsg.Text.Length;
                }));

                string sendStr = "Server" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "/n" + "Ok! Client Send Message Sucessful!";
                byte[] bs = Encoding.Default.GetBytes(sendStr);//.ASCII.GetBytes(sendStr);
                s.Send(bs, bs.Length, 0);//返回客户端成功信息
                serverSocket.BeginAccept(new AsyncCallback(ReciveData), null);
                while (true)
                {
                    try
                    {
                        int recv = s.Receive(buffer);
                        string stringdata = Encoding.Default.GetString(buffer, 0, recv);
                        DateTimeOffset now = DateTimeOffset.Now;
                        //获取客户端的IP和端口
                        ip = s.RemoteEndPoint.ToString();
                        if (stringdata == "STOP")
                        {
                            //当客户端终止连接时
                            Invoke(new Action(delegate()
                            {
                                rtb_reciveMsg.Text += (ip + "已从服务器断开/n");
                                rtb_reciveMsg.Focus();
                                rtb_reciveMsg.Select(rtb_reciveMsg.TextLength, 0);
                                rtb_sendMsg.Focus();
                            }));
                            break;

                        }
                        if (!string.IsNullOrEmpty(stringdata))
                        {
                            Invoke(new Action(delegate()
                            {
                                rtb_reciveMsg.Text += (ip + now.ToString("G") + "/n" + stringdata + "/n");
                                rtb_reciveMsg.Focus();
                                rtb_reciveMsg.Select(rtb_reciveMsg.TextLength, 0);
                                rtb_sendMsg.Focus();
                            }));
                        }
                    }
                    catch
                    {
                        //当客户端终止连接时
                        Invoke(new Action(delegate()
                        {
                            rtb_reciveMsg.Text += (ip + "已从服务器断开/n");
                            rtb_reciveMsg.Focus();
                            rtb_reciveMsg.Select(rtb_reciveMsg.TextLength, 0);
                            rtb_sendMsg.Focus();
                        }));
                        s.Close();
                        break;
                    }
                }
        }
        private void btn_stopServer_Click(object sender, EventArgs e)
        {

            socketState = false;
            lbl_state.Text = "服务已关闭";
        }

        private void btn_sendMsg_Click(object sender, EventArgs e)
        {
           

            string sendStr = "Server" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "/n" + rtb_sendMsg.Text;
            byte[] bs = Encoding.Default.GetBytes(sendStr);//ASCII.GetBytes(sendStr);
            s.Send(bs, bs.Length, 0);
            rtb_sendMsg.Clear();
            

        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值