Socket 学习(一)

Socket 学习(一)

 

本次项目增加的引用
using
 System.Net; using System.Net.Sockets; using System.Threading;


TextBox.CheckForIllegalCrossThreadCalls = false;//禁止多线程检查

        Socket S1;//发送方套接字(本方)

        Socket S2;//接收到的套接字(对方)

        Thread T1;

        Thread T2;

        private void button1_Click(object sender, EventArgs e)

        {

            button1.Enabled = !button1.Enabled;

            S1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化自己的套接字

            S1.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80));//绑定自己的终结点(有信息,请通过这个IP的这个端口发给我)

            S1.Listen(10);                     //  侦听   参数的意思是最多连接数                     

            T1 = new Thread(StartListen);        //开启多线程 对侦听的信息做回应

            T1.IsBackground = true;

            T1.Start();

        }

        void StartListen()

        {

            while (true)

            {

                S2 = S1.Accept();                     //Accept :返回接收套接字

                textBox1.AppendText("客户端连接成功!" + "\r\n");

                T2 = new Thread(TheadReceive);//多线程Receive

                T2.IsBackground = true;

                T2.Start();

            }

        }

        void TheadReceive()

        {

            try

            {

                while (true)

                {

                    byte[] ByteData = new byte[1024 * 1024];     //设置最大字节数1M

                    int length = S2.Receive(ByteData);          //   Receive:参数表示 接收方的套接字 内容,返回内容长度,最重要的 它监听过程中会阻断当前线程(就是说:接受了一次之后就终止了线程,循环,本次完成循环就终止了)

                    string Message = Encoding.UTF8.GetString(ByteData, 0, length);//byte转string

                    if (!string.IsNullOrEmpty(Message))

                    {

                        textBox1.AppendText(Message + "\r\n");

                    }

                }

            }

            catch (SocketException SE)

            {

                textBox1.AppendText("连接断开"+"\r\n");

            }

            

 

        }

控件默认是单线程的,所以要禁止多线程检查,这样就不会报莫名奇怪的错了
这里的IP 和端口 是 表示 ,别人访问我,就要用此IP和 此端口


下面是客户端的

Socket 学习(一)

就4行代码
        Socket S1;

        Thread T1;

        private void button1_Click(object sender, EventArgs e)

        {

            S1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            S1.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80));

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            S1.Send(Encoding.UTF8.GetBytes(textBox1.Text));
        }
这里客户端存在一个问题,可以建立很多个连接,但是服务端不知道,因为服务端接收到的连接套接字 句柄 没次都可以不一样
这仅仅有 客户端发送和服务端接受的功能。
那么互相发送又该如何呢?多人通讯呢?

你可能感兴趣的:(socket)