基于C#的socket聊天室(附源码)

基于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();

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

小结

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

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

  • 13
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论
要实现C#的简易聊天室,可以使用Socket来进行操作。首先,声明一个套接字(Socket)作为监听套接字,使用AddressFamily.InterNetwork、SocketType.Stream和ProtocolType.Tcp来创建这个套接字。接下来,需要设置服务器的IP地址和端口号。然后,使用Socket的Bind方法将套接字绑定到指定的IP地址和端口上。接着,使用Socket的Listen方法开始监听连接请求。当有客户端连接请求时,可以使用Accept方法接受连接,并创建一个新的套接字来处理该连接。这样就可以与客户端进行通信了。 在聊天室中,可以使用多线程来处理多个客户端的连接。当有新的客户端连接时,创建一个新的线程来处理该连接,这样就可以同时处理多个客户端的消息收发。 在处理客户端消息的过程中,可以使用Socket的Receive和Send方法来接收和发送数据。可以使用StreamReader和StreamWriter类来简化数据的读取和写入操作。 通过这些步骤,就可以实现一个简单的C# Socket聊天室。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C#基于Socket的简单聊天室实践](https://blog.csdn.net/wyqlxy/article/details/46923611)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值