基于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也叫套接字

基于C#的socket聊天室(附源码)_第1张图片

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

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

这里我做了一个登录界面,没有设置登录账号密码显示,直接点击登录即可;
基于C#的socket聊天室(附源码)_第2张图片

打开之后的页面:

基于C#的socket聊天室(附源码)_第3张图片

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

基于C#的socket聊天室(附源码)_第4张图片

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

基于C#的socket聊天室(附源码)_第5张图片

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

登录

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

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#,websocket)