zoukankan      html  css  js  c++  java
  • 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("客户端连接成功!" + "
    ");
                    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 + "
    ");
                        }
                    }
                }
                catch (SocketException SE)
                {
                    textBox1.AppendText("连接断开"+"
    ");
                }
                
     
            }

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


    下面是客户端的

    就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));
            }
    这里客户端存在一个问题,可以建立很多个连接,但是服务端不知道,因为服务端接收到的连接套接字 句柄 没次都可以不一样
    这仅仅有 客户端发送和服务端接受的功能。
    那么互相发送又该如何呢?多人通讯呢?
  • 相关阅读:
    error in ./src/views/demo/ueditor.vue Module build failed: Error: Cannot find module 'node-sass' Require stack:
    Spring Cloud Stream 定时任务消息延迟队列
    项目结构介绍
    Java面试题
    SpringBoot中用SpringSecurity实现用户登录并返回其拥有哪些角色
    MySQL索引优化
    MySQL中的执行计划explain
    SpringBoot之单体应用
    SpringBoot之SSM多模块应用
    Spring-aop面向切面编程笔记
  • 原文地址:https://www.cnblogs.com/bingguang/p/3182320.html
Copyright © 2011-2022 走看看