基于C#-socket聊天室

前言

源代码:https://gitee.com/TL0902/term/blob/master/C%23%E8%81%8A%E5%A4%A9%E5%AE%A4/Tchat.rar

直接下载即可,开发工具是vs2019;

我已经看出来了,大家都喜欢干货,而且是有现成代码的,不知道大家过不过周六日!

最近写了一个小程序,通过socket搭建的一个聊天室,工具是vs2019,语言是C#,这样好做图形化界面;

其实本来想代码丢上来完事,但是有些同学不理解socket,以及使用方法,可能会出先各种bug,所以还是简单的给大家说明下,同时主要是理解socket的使用,以及其中的一些小知识点,希望大家有所收获;

程序还可以更好的优化,交给你们了~

代码讲解

socket

介绍

来自百度百科:socket也叫套接字

其实就是两个主机,需要相互通信之间的一种协议,如果想深入了解,大家可以后面自行深入理解里面的协议;

在其实可以很简单的认识,一个中国人跟一个美国人想要完成交流,要么都同时使用中文,要么使用英文,他们达成必须要达成一种协议,只有互相达成了使用中文交流的协议才能进行交流,所以两个主机需要互相通信,也需要一种协议,这里我们选择的就是socket协议;

socket使用

socket使用很简单,把大象装冰箱分几步,也是同样的道理;

不管是服务器还是客户端都有同样的三部:

public Socket socket;       //服务器端socket
public Socket client;       //客户端socket
public byte[] buffer = new byte[1024*1024*2];    //消息缓冲区string ip = textBox2.Text;
int port = Convert.ToInt32(textBox3.Text);//1、实例化套接字(IP4寻找协议,流式协议,TCP协议)
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//2、实例化ip
IPAddress address = IPAddress.Parse(ip);//3、创建网络端口,包括ip和端口  127.0.0.1:30
IPEndPoint endPoint = new IPEndPoint(address, port);

服务端,那如果我们要写服务端只需要开启socket绑定,监听功能:

//服务器端
//4、绑定套接字
socket.Bind(endPoint);//输出监听信息
richTextBox1.Text += "开始监听" + socket.LocalEndPoint.ToString() + "\r\n";//服务器可以接收的连接最大数
socket.Listen(int.MaxValue);///接收客户端连接
client = socket.Accept();

客户端,如果要写客户端只需要开启socket连接客户端连接功能:

//4.0 建立连接
client.Connect(endPoint);richTextBox1.Text += "连接服务器成功" + "\r\n";

这里可以动手实践,看是否通过上面实现简单的连接;

体验上手

这里我讲项目打包放在了这里,大家下载下来可以先体验以下,在bin目录下的Tchat.exe可以直接双击运行程序:

程序源码地址:https://gitee.com/TL0902/term/blob/master/C%23%E8%81%8A%E5%A4%A9%E5%AE%A4/Tchat.rar**代码在这里(gitee直接下载)**

这里我做了一个登录界面,没有设置登录账号密码显示,直接点击登录即可;

打开之后的页面:

这里以两个程序为例,进行聊天,需要运行两个Tchat,一个点击广播,一个点击连接,可以看到连接成功:

下面可以互相发送消息了,同时我还做了一个十连击,好玩的小功能:

到这里这个小程序我们就体验完了,下面我们来看一下它的实现过程;

登录

这里的登录页面,其实很简单,只是在程序开始时,创建了一个窗体,然后开始了模式窗口,通过一个标志位,判断是否打开程序,这里没有使用账户和密码,大家可以自己去实现输入账号密码来实现登录,以及注册,很简单的功能;

Form1 form1 = new Form1();
form1.ShowDialog(); //模式窗口,先运行Form1的作用
if (form1.closeflag == false){Application.Run(new main());}

多线程同步

如果大家动手实现了,socket中所讲的socket连接,那么我们接收消息跟发送消息怎么样才可以做到发送和接收同步过更新,这里就需要我们实现线程同步,线程同步从理论上并不是同步的,但是给我们的感觉时同步的;

几乎每个语言都有一个Thread实现线程同步,那C#中Thread可以实现线程同步,只需要创建一个线程,然后开启即可,这里呢不用过多说明,如果没有了解线程同步的同学,可以去学习下,一个很重要的知识点,不是一两下就可以细说完成的,当然如果有需要,评论留言,如果可以我会给大家再写一个线程的文档;

这里大家可以去看小程序源码,很简单;

C#中线程的实现是通过委托机制,也就是参数函数化;大家可以创建一个方法,开启一个线程

只需要两步:

//1、创建一个线程
Thread recvierThread = new Thread(recvierMassage);   //通过委托,recvierMassage方法为线程体
//2、开启一个线程
recvierThread.Start();

这里我们发现博主没有讲解多人聊天功能,对,没有完善,大家去实现吧!

小结

这里博主故意给大家留下了好多优化操作,大家可以持续完善!

一定要多动手哦
还有就是给孩子点个赞吧,留个关注也行啊!感谢万分!

基于C#的socket聊天室(附源码)相关推荐

  1. 聊聊语音聊天室app源码实时音视频中的技术难点:回声消除+噪声消除

    聊聊语音聊天室app源码实时音视频中的技术难点:回声消除+噪声消除 在聊聊语音聊天室app源码各个实时音视频互动场景中,回声和噪声对于影响用户体验而言都是很大的问题.音视频正在发展成为互联网线上沟通的 ...

  2. 聊天室软件源码开发中,该如何实现多线程同步?

    问题背景 在聊天室软件源码开发中,需执行多线程任务:任务1.任务2并行执行:等全部执行完成后,执行任务3. // 每个 任务 通过 sleep 模拟耗时 val task1: () -> Str ...

  3. 聊天室软件源码前端性能优化,缓存角度的相关分析

    在我们考虑提高聊天室软件源码页面渲染速度之前先来思考一个问题,一个页面的速度由什么决定?显而易见,这里主要包含两方面的影响因素. 1.资源传输时间(tcp链接时间和响应时间) 2.dom渲染时间 这两 ...

  4. 类似QQ聊天软件也能用Java实现啦!(多人聊天原理附源码)

    多人聊天室原理图 源码 工具类: 该类用于关闭各种流. public class CloseUtil {public static void CloseAll(Closeable... closeab ...

  5. PHP匿名在线聊天室系统源码 自适应PC+WAP端

    介绍: PHP匿名在线聊天室系统源码 自适应PC+WAP端 可发语音.图片 修改数据库config\settings.php可拿去搭建专门跟客户聊天的网站 网盘下载地址: http://kekewl. ...

  6. PHP匿名在线聊天室系统源码

    PHP匿名在线聊天室系统源码,自适应PC+WAP端,可发 语音.图片.带有三套主题模板,完美可用. [完整源码链接] PHP匿名在线聊天室系统源码.zip-PHP文档类资源-CSDN文库

  7. 分享66个PHP聊天室类源码,总有一款适合您

    分享66个PHP聊天室类源码,总有一款适合您 66个PHP聊天室类源码下载链接:https://pan.baidu.com/s/1_Fbbc3WMVWN7jjgTRaCnXw?pwd=h75j 提取码 ...

  8. Anlin-chat多功能聊天室php源码下载,极速安装

    一.名称:Anlin-chat多功能聊天室php源码 二.简介(作用): 可修改成 网站客服系校园站 统 可盈利,利用打赏.VIP.内容付费.广告盈利.资源付费等方法盈利. 三.下载地址: 聊天室zi ...

  9. 基于Simulink雷达系统建模仿真(附源码)

    目录 一.系统架构 二.运行结果 2.1示例模拟 2.2 天线增益/方向的影响 2.3 接收器 LO 上的相位噪声使能 2.4 相位噪声的影响 三.源码 此示例显示如何设置由发射器.带目标的信道和接收 ...

  10. 基于Simulink宽带单基地雷达系统仿真(附源码)

    目录 一.探索示例 1.1 收发器 1.2 信号处理子系统 1.3 渠道 1.4 目标子系统 二.结果和显示 三.总结 四.程序 本示例演示如何仿真宽带雷达系统.当雷达系统的带宽超过系统中心频率的5% ...

最新文章

  1. python snmp 交换机 配置文件_如何使用python从SNMP获取数据?
  2. linux 脚本 变量为空,Shell脚本中判断输入变量或者参数是否为空的方法
  3. ffmpeg视频学习网站
  4. MySQL-基础操作之增删改查
  5. ASP.NET基础教程-DataGrid表格控件-模板列的使用
  6. nodejs创建rtmp-streamer服务器
  7. Boost:使用/type <>语法测试成员函数
  8. win7关闭休眠_【科普】笔记本电脑,待机/睡眠/休眠有啥区别?(ACPI SPM S0-S5)...
  9. uoni扫地机器人好用吗_抖音走红的日本uoni尤利扫地机器人好吗?体验感如何?...
  10. Minio的MySQL通知 实现全过程
  11. AI应用说 | 「虫口夺粮」的害虫识别还是牛场24小时无人监控,AI+农业话题咱们唠一唠...
  12. php strtofloat,Delphi6函数大全(3)
  13. UVa272 - Tex Quotes
  14. 什么是可加,半可加,不可加事实?
  15. roc曲线spss怎么做_统计第十三课:SPSS ROC曲线
  16. PageAdmin网站建设教程:仿58同城站群实现不同地区Ip跳转不同分站
  17. mybatis传入多个参数
  18. AtCoder ABC172 E - NEQ(组合数 + 容斥原理)
  19. CSP-S(提高组)游记
  20. 二、计算机网络体系架构——网络工程师成长之路

热门文章

  1. 快速刷入recovery的方法
  2. [转载]初学者入门:Tomcat在Win2000下的安装
  3. 搅拌站用计算机怎么校称,混凝土搅拌站称量偏差问题分析和处理建议
  4. apt-get 安装源数字签名错误解决方法
  5. ts判断数据是否存在
  6. 【题解】慈溪中学-8.14-T1
  7. 微知库计算机应用基础,《现代职业教育》杂志2021年第2期改革探索实践栏目重点选题...
  8. Power Pivot关系函数
  9. java调用《上海发布》接口,获取特定公交到站信息
  10. linux rar无法运行,linux服务器无法解压rar文件的解决方法