广告
返回顶部
首页 > 资讯 > 精选 >C#如何基于Socket实现多人聊天功能
  • 470
分享到

C#如何基于Socket实现多人聊天功能

2023-06-29 03:06:16 470人浏览 泡泡鱼
摘要

这篇文章主要介绍C#如何基于Socket实现多人聊天功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下服务器服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。代码:using 

这篇文章主要介绍C#如何基于Socket实现多人聊天功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下

服务器

服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。

代码:

using System;using System.Collections.Generic;using System.net;using System.Net.Sockets;using System.Text;using System.Threading;namespace ChatRoomService{    class Service    {        Socket socketSevice ;        List<Socket> userList;//用户组        public Service()        {           socketSevice = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.tcp);           userList = new List<Socket>();        }        public void  Start()        {            socketSevice.Bind(new IPEndPoint(IPAddress.Any,5566));            socketSevice.Listen(10);            Console.WriteLine("服务器启动成功");            //开启接受连接,用多线程            Thread accThread = new Thread(Accept);            accThread.IsBackground = true;            accThread.Start();        }        private void Accept()        {            //接受连接            Socket clientSocket = socketSevice.Accept();            userList.Add(clientSocket);            //打印已经连接IP地址            Console.WriteLine(IPToAddress(clientSocket)+"连接进来了");            //            Thread RecvThread = new Thread(ReceMessage);            RecvThread.IsBackground = true;            RecvThread.Start(clientSocket);            Accept();//递归        }        //接收客户端信息        private void ReceMessage(Object obj)        {            Socket client = obj as Socket;            byte[] strByte = new byte[1024 * 1024];//设定接受字符的长度            string str = "";            try            {              int len = client.Receive(strByte);//接受用户发送的内容              str = Encoding.Default.GetString(strByte, 0, len);              Broadcast(str,client);//广播给用户              Console.WriteLine(str);             }             catch (Exception e)             {                Console.WriteLine(IPToAddress(client)+"退出");                userList.Remove(client);                Thread.CurrentThread.Abort();//退出时掐死线程,不然递归反弹            }           ReceMessage(client); //使用递归        }        /// <summary>        /// 广播信息        /// </summary>        /// <param name="useStr">传入收到的传输的内容</param>        /// <param name="obj">传送信息的客户</param>        private void Broadcast(string userStr,object obj)        {            Socket clientSend = obj as Socket; //当前发送信息的客户            foreach (Socket client in userList)            {                if (client != clientSend)//将信息广播给其他用户                {                    client.Send(Encoding.Default.GetBytes(IPToAddress(clientSend)+":"+userStr));                }            }        }        //转换出连来客户的IP地址        private string IPToAddress(Socket soket)        {            return (soket.RemoteEndPoint as IPEndPoint).Address.ToString();        }    }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ChatRoomService{    class Program    {        static void Main(string[] args)        {            Service ss = new Service();            ss.Start();            Console.ReadLine();        }    }}

客户端

客户端的功能开始十分简单,可以发送信息给服务器。也可以接收服务器转发过来其他客户端的信息。

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;namespace ChatRoom{    class ClientRoom    {        Socket clientSocket;        public ClientRoom()        {            clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//初始化服务器        }        /// <summary>        /// 连接服务器        /// </summary>        /// <param name="Ip"></param>        /// <param name="port"></param>        public void Connected(string Ip,int port)        {            clientSocket.Connect(Ip,port);            Console.WriteLine("连接成功");            // ClientSocket.Bind(new IPEndPoint());            Thread RecvThread = new Thread(RecvMessage);            RecvThread.IsBackground = true;            RecvThread.Start();        }       public void Send(String str)        {            clientSocket.Send(Encoding.Default.GetBytes(str));        }        /// <summary>        /// 接受信息        /// </summary>        private void RecvMessage()        {            try            {                byte[] strByte = new byte[500 * 1024];                int len = clientSocket.Receive(strByte);                Console.WriteLine(Encoding.Default.GetString(strByte, 0, len));            }            catch (Exception e) //服务器关闭            {                Console.WriteLine("服务器关闭");                Thread.CurrentThread.Abort();//关闭时切断进程            }            RecvMessage();        }            }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ChatRoom{    class Program    {        static void Main(string[] args)        {            ClientRoom client = new ClientRoom();            client.Connected("127.0.0.1", 5566);            string str = Console.ReadLine();            while (!str.Equals("q"))            {                client.Send(str);                str = Console.ReadLine();            }            Console.ReadLine();        }    }}

可以正常对话,测试一下。假装和自己对话

C#如何基于Socket实现多人聊天功能

目前还没有解决沾包问题

以上是“C#如何基于Socket实现多人聊天功能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: C#如何基于Socket实现多人聊天功能

本文链接: https://www.lsjlt.com/news/322299.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#基于Socket实现多人聊天功能
    本文实例为大家分享了C#基于Socket实现多人聊天功能的具体代码,供大家参考,具体内容如下 服务器 服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。 代码: u...
    99+
    2022-11-13
  • C#如何基于Socket实现多人聊天功能
    这篇文章主要介绍C#如何基于Socket实现多人聊天功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下服务器服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。代码:using ...
    99+
    2023-06-29
  • Java基于Socket实现多人聊天室
    本文实例为大家分享了Java基于Socket实现简易版多人聊天室的具体代码,供大家参考,具体内容如下 一、 聊天室需求 1、一个服务端,多个客户端;2、实现客户端和服务端的交互;3、...
    99+
    2022-11-13
  • C#基于Socket实现简单聊天室功能
    因为这段时间在学习Socket,所以就试着写了一个简单的聊天室。主要分为服务器端和多个客户端。利用服务器端作数据中转站,实现消息群发。 1、服务器端有两个类: using Syste...
    99+
    2022-11-13
  • C++基于socket编程实现聊天室功能
    本文实例为大家分享了C++基于socket编程实现聊天室的具体代码,供大家参考,具体内容如下 服务端 // server.cpp : 此文件包含 "main" 函数。程序执行将在...
    99+
    2022-11-12
  • C++基于socket UDP网络编程如何实现聊天室功能
    这篇文章主要介绍C++基于socket UDP网络编程如何实现聊天室功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下0.通信步骤流程图(左:服务器;右:客户端;)1.服务器代码1.1服务器类头文件(CS...
    99+
    2023-06-20
  • Java Socket+多线程实现多人聊天室功能
    本文实例为大家分享了Java Socket+多线程实现多人聊天室的具体代码,供大家参考,具体内容如下 思路简介 分为客户端和服务器两个类,所有的客户端将聊的内容发送给服务器,服务器接...
    99+
    2022-11-12
  • C++基于socket多线程实现网络聊天室
    本文实例为大家分享了C++基于socket多线程实现网络聊天室的具体代码,供大家参考,具体内容如下 1. 实现图解 2. 聊天室服务端:TCP_Server_Chat.cpp ...
    99+
    2022-11-12
  • Android基于socket实现的简单C/S聊天通信功能
    本文实例讲述了Android基于socket实现的简单C/S聊天通信功能。分享给大家供大家参考,具体如下: 主要想法:在客户端上发送一条信息,在后台开辟一个线程充当服务端,收到...
    99+
    2022-06-06
    通信 socket Android
  • 基于C++实现TCP聊天室功能
    本文实例为大家分享了C++实现TCP聊天室功能的具体代码,供大家参考,具体内容如下 TCPServer.cpp: // TCPServer.cpp : Defines the ...
    99+
    2022-11-12
  • C#基于WebSocket实现聊天室功能
    本文实例为大家分享了C#基于WebSocket实现聊天室功能的具体代码,供大家参考,具体内容如下 前面两篇温习了,C# Socket内容 本章根据Socket异步聊天室修改成WebS...
    99+
    2022-11-13
  • C++基于socket UDP网络编程实现简单聊天室功能
    本文实例为大家分享了C++基于socket UDP实现简单聊天室功能的具体代码,供大家参考,具体内容如下 0.通信步骤流程图 (左:服务器;右:客户端;) 1.服务器代码 1.1服...
    99+
    2022-11-12
  • 如何使用C++基于socket多线程实现网络聊天室
    这篇文章主要介绍了如何使用C++基于socket多线程实现网络聊天室,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下1. 实现图解2. 聊天室服务端:TCP_Ser...
    99+
    2023-06-20
  • C#如何使用Socket实现本地多人聊天室
    这篇文章主要介绍C#如何使用Socket实现本地多人聊天室,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!【脚本一:Server端】使用本机地址:127.0.0.1完整代码using System;using...
    99+
    2023-06-29
  • javaGUI实现多人聊天功能
    本文实例为大家分享了javaGUI实现多人聊天的具体代码,供大家参考,具体内容如下 服务器 package com.ff.chat.chatserver.frame; import...
    99+
    2022-11-13
  • C#使用Socket实现本地多人聊天室
    本文实例为大家分享了C#使用Socket实现本地多人聊天室的具体代码,供大家参考,具体内容如下 【脚本一:Server端】 使用本机地址:127.0.0.1 完整代码 using S...
    99+
    2022-11-13
  • 基于Ajax的聊天机器人功能的实现
    🤖️ 哈喽!大家好呀。如果无聊就和机器人聊聊天吧 在初步进入Ajax学习 就忍不住给大家分享今天的劳动成果啦 先来看看效果图: 功能实现: ...
    99+
    2022-11-12
  • 怎么用Java Socket+多线程实现多人聊天室功能
    这篇文章主要讲解了“怎么用Java Socket+多线程实现多人聊天室功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java Socket+多线程实现多人聊天室功能”吧!思路简介分...
    99+
    2023-06-20
  • 如何使用C#基于WebSocket实现聊天室功能
    这篇文章将为大家详细讲解有关如何使用C#基于WebSocket实现聊天室功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ServerHelper:using System;using ...
    99+
    2023-06-29
  • Redis实现多人多聊天室功能
    本文为大家分享了Redis支持多人多聊天室功能的设计代码,供大家参考,具体内容如下 设计原理 左边的一个数据域,代表两个聊天室,聊天室id分别是827,729 在聊天室827里,有2个人,分别是jaso...
    99+
    2022-06-04
    多人多 聊天室 功能
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作