C#基础学习17(Socket通信,模拟在线聊天案例)

Scoket编程模型

服务器端

1.创建Socket对象,设置协议、传输方式等(连接Socket)    Socket()

2.绑定IP与端口(设置要监听的IP与端口)       Bind()

3.开始监听       Listen()

4.开始接受客户端连接   //阻塞线程,同时也需要循环不断接受用户连接       Accept()

5.接受了哭护短的连接,生成一个新的Socket对象(通信Socket)

6.接受和发送消息//需要循环不断接收用户的消息      Receive()、Send()

7.禁用发送与接收功能      Shutdown()

8.关闭释放资源      Close()

客户端

1.创建Socket对象,设置协议、传输方式等(连接Socket)    Socket()

2.连接服务器(IP与端口)    Connect()

3.向服务器发送、接收消息      Receive()、Send()

4.禁用发送与接收资源      Shutdown()

5.关闭释放资源      Close()

模拟在线聊天案例

先看效果图:

 服务器端代码:

static void Main(string[] args)
{
    //服务器端
    //1.创建Socket对象  Socket()
    Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//InterNetwork表示IPv4,SocketType.Stream表示以流的形式传输,ProtocolType.Tcp表示使用Tcp协议
    //2.绑定IP和端口    Bind()、
    server.Bind(new IPEndPoint(IPAddress.Parse("192.168.2.108"), 11811));//11811为端口号
    //3.监听            Listen()
    server.Listen(5);//排队人数,同时等待连接的人数
    Console.WriteLine("开启服务器成功");
    //4.接收,得到一个代理 Accept()
    Thread tAccept = new Thread(() => {
        while (true)
        {
            Socket client = server.Accept();//接收,等客户端连接上
            Console.WriteLine("连接上一个客户端");
            Thread tReceive = new Thread(() =>{
                while (true)
                {
                    //5.通过代理进行通信   Receive()接收   Send()发送
                    byte[] bs = new byte[1024];
                    int length = client.Receive(bs);//接收客户端发来的消息
                    string str = Encoding.UTF8.GetString(bs, 0, length);//字节数组转成字符串进行输出
                    Console.WriteLine("客户端" + client.RemoteEndPoint + ":" + str);//输出接受的信息
                }
            });
            tReceive.IsBackground = true;
            tReceive.Start();
        }
    });
    tAccept.IsBackground = true;
    tAccept.Start();
    Console.ReadLine();
}

客户端代码:

static void Main(string[] args)
{
    //客户端
    //创建Socket对象    Socket()
    Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//InterNetwork表示IPv4,SocketType.Stream表示以流的形式传输,ProtocolType.Tcp表示使用Tcp协议
    //连接              Connect()
    client.Connect(new IPEndPoint(IPAddress.Parse("192.168.2.108"), 11811));//11811为端口号
    Console.WriteLine("连接服务器成功");
    while (true)
    {
        //通信              Receive   Send()
        string str = Console.ReadLine();
        byte[] bs = Encoding.UTF8.GetBytes(str);
        client.Send(bs);
    }
    //关闭释放          Shutdown()Close()
    //client.Shutdown(SocketShutdown.Both);
    //client.Close();
    //Console.ReadLine();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值