C#Socket 聊天室

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

服务端:

********************************************************************************

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net.Sockets;
using System.Net;

namespace renycForm
{
    public partial class Server : Form
    {
        public Server()
        {
            InitializeComponent();
        }
        Thread LisThread;
        Socket LisSocket;
        Socket newSocket;
        EndPoint point;
        string strmes = String.Empty;
        int port = 8899;//定义侦听端口号

        private void btListen_Click(object sender, EventArgs e)
        {
            LisThread = new Thread(new ThreadStart(BeginListern));//开线程执行BeginListern方法
            LisThread.Start();//线程开始执行
        }
        public IPAddress GetIP()
        {     /*获取本地服务器的ip地址  */
            IPHostEntry iep = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ip = IPAddress.Parse("169.254.238.154");
            return ip;
        }
        public void BeginListern()
        {
            LisSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Socket
            IPAddress ServerIp = GetIP();/*获取本地服务器的ip地址  */
            IPEndPoint iep = new IPEndPoint(ServerIp, port);

            LisSocket.Bind(iep); /*将Socket绑定ip */
            //toolStripStatusLabel1.Text = iep.ToString() + "正在监听";fe80::ecb5:8ecb:e765:ee9a%11
            LisSocket.Listen(50); //Socket开始监听
            newSocket = LisSocket.Accept();//获取连接请求的Socket
            /*接收客户端Socket所发的信息  */
            while (true)
            {
                try
                {
                    byte[] byteMessage = new byte[1024];
                    newSocket.Receive(byteMessage);//接收信息
                    //MessageBox.Show(Encoding.Default.GetString(byteMessage));
                    Control.CheckForIllegalCrossThreadCalls = false;
                    point = newSocket.RemoteEndPoint;//获取客户端的Socket的相关信息
                    IPEndPoint IPpoint = (IPEndPoint)point;
                    strmes += IPpoint.Address.ToString() + " " + DateTime.Now.ToString() + "说:/r/n" + Encoding.Default.GetString(byteMessage).Trim(new char[] { '/0' }) + "/r/n";
                    this.RtRecive.Text = strmes;
                }
                catch (SocketException ex)
                {
                    //toolStripStatusLabel1.Text += ex.ToString();
                }
            }
        }
        private void BtCancle_Click(object sender, EventArgs e)
        {
            try
            {
                LisSocket.Close();//关闭Socket
                LisThread.Abort();//线程停止
                LisThread = null;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Application.Exit();
            }
        }
        private void btSend_Click(object sender, EventArgs e)
        {
            byte[] byteData = Encoding.Default.GetBytes(this.RtSend.Text);
            newSocket.Send(byteData);//发送信息即由服务器往客户端上发信息
            this.RtSend.Text = null;
        }
    }
}

 

客户端:

**********************************************************************************

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace RenSocket_Client
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public static Socket ClientSocket;

        private void btContent_Click(object sender, EventArgs e)
        {
            ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            string ip = "169.254.238.154";//服务器ip
            IPAddress ipa = IPAddress.Parse(ip);
            IPEndPoint iep = new IPEndPoint(ipa, 8899);
            //this.toolStripStatusLabel1.Text = "已经建立连接.";
            Control.CheckForIllegalCrossThreadCalls = false;/*如果尝试访问控件的方法或属性之一的线程不是创建该控件的线程,
                                                             * 则通常会导致不可预知的结果。
                                                             * 通常,无效的线程活动是对访问控件的 Handle 属性的错误线程的调用。
                                                             * 将 CheckForIllegalCrossThreadCalls 设置为 true 可以在调试时更容易查找并诊断此线程活动。
                                                             * 请注意在调试器外部启动应用程序时,非法跨线程调用将始终引发异常。*/
            try
            {
                ClientSocket.Connect(iep);//连接到服务器
                Thread thread = new Thread(new ThreadStart(targett));
                thread.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

        private void btSend_Click(object sender, EventArgs e)
        {
            if (ClientSocket.Connected)//判断Socket是否已连接
            {

                byte[] SendMessage = new byte[100];
                SendMessage = Encoding.ASCII.GetBytes(this.RtSend.Text);
                ClientSocket.Send(SendMessage);//从数据中的指示位置开始将数据发送到连接的Socket。
                //MessageBox.Show(Encoding.Default.GetString(SendMessage) + "发送成功!");
                this.RtSend.Text = null;
            }
            else
            {
                MessageBox.Show("未建立连接!");
            }

        }
        public void targett()
        {
            //this.toolStripStatusLabel1.Text = "已经建立连接准备接受数据";
            while (true)
            {
                byte[] bytes = new byte[100];
                int rev = ClientSocket.Receive(bytes, bytes.Length, 0);//将数据从连接的   Socket   接收到接收缓冲区的特定位置。
                if (rev <= 0)
                {
                    break;
                }
                string strev = System.Text.Encoding.Default.GetString(bytes);
                this.RtRecive.AppendText("服务器对客户端说: /r/n" + strev + "/r/n");
            }
        }

        private void btExit_Click(object sender, EventArgs e)
        {
            ClientSocket.Shutdown(SocketShutdown.Both);//发送完成之后停止Socket
            ClientSocket.Close();//发送完成之后关闭Socket
            Application.Exit();

        }
    }
}

C# Socket多人聊天室 C#在线局域网多人聊天室,实现简单的聊天功能,能很好的帮助初学者学习。 立即下载

相关推荐

C# Socket 聊天室 客户端和服务器

C#写的基于Socket的简单聊天室包括客户端和服务器。 本程序为基于C/S模式的网络聊天程序,采用TCP/IP协议,根据“WinSockets规范“编写而成。它实现了聊天的基本功能,支持多个客户端以不同的用户名同时登录服务器,每个客户端可以随时同服务器断开。 服务端方面也添加了历史记录,可根据个人需要自行修改! 功能上包括信息的实时刷新等等,其他的自己看了代码页就知道了! 贴出来供参考下减少一些编程上的弯路!!! MyBlog:http://zhangjiankun880.blog.com

C#语言使用Socket 实现简易聊天室功能,有源码并且可以直接运行

C# 使用socket实现简易聊天室功能

weixin_45943609的博客 1422

基于C#的一个Socket聊天室实例

一个基于C#的Socket聊天室的实例,包含了基本聊天室的所有功能,方便开发者学习

c#的Socket实现多人聊天室(附源码)

在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据 套接字之间的连接过程可以分为三个步骤 : (1)服务器监听。 (2)客户端请求。 (3)连接确认 。 c#的Socket通讯实现聊天室,支持消息与图片发送 c#实现的主要步骤: 1:第一步创建一个开始监听的Socket 2:第二步创建Ip地址和端口号对象 3:第三步让监听的Socket绑定Ip地址跟端口号 4:第四步

qq_43254236的博客 7737

C# WebSocket实现简易聊天室

之前出了一期Tcp通讯教程,那个是关于PC端跟PC端通信的,这一期是PC端跟浏览器通信的,底层上来说其实基于Tcp通讯协议。1.建立控制台应用程序,框架选择4.7.2。5.客户端代码用HbuilderX运行。2.进入Nuget安装Fleck库。3.修改Program.cs代码。

冰凌的博客 1367

C# Socket——实现一个简单的一对一聊天室

C# Socket实现一个简单的聊天室

m0_48285588的博客 1258

.NET编程——利用C#实现基于Socket类的聊天室(WinForm)

利用C#实现基于Socket类的聊天室(WinForm)

吾门的博客 5182

利用C#Socket实现简单聊天室

因为这段时间在学习Socket,所以就试着写了一个简单的聊天室。主要分为服务器端和多个客户端。利用服务器端作数据中转站,实现消息群发。 服务器端有两个类: using System.Collections.Generic; using System.Net; using System.Net.Sockets;namespace 聊天室_Socket_TCP_服务器端 { class Prog

天凉好个秋 7595

C#socket编程_TCPunity聊天室.02

上篇写完服务端的代码,可以接收一条数据,其实只要在原代码上加个线程,线程里加个死循环,一直接收数据,当socket断开后再跳出即可,接下来写客户端的代码,客户端代码也是差不多,1.创建socket,2.连接服务端,3.接收发送消息 首先在unity上搭建聊天室框架,这里用到了NGUI插件,不过聊天室界面怎么搭都可以,直接上代码: public string ipaddress = "192...

labylei的博客 208

201803041447->初试c#socket聊天室

目的:利用socket来完成简单多人聊天室 服务端 Program.cs namespace chatserver {     internal class Program     {         private static void Main(string[] args)         {             Server server = new Server("

qq_28902031的博客 230

C#Socket多线程通信(聊天室

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket 一般有两个端,一个服务器端(ServerScoket)一个客户端(ClientSocket) Socket是tcp\ip网络协议接口。内部定义了许多的函数和例程。可以看成是网络通信的一个端点 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 相信看这篇博客

wyz745322878的博客 4689

C#Socket聊天室(小白整理)

最近算是0基础学了socket的编程,发现很多不友好。。其实是自己不知道,啊哈哈。最开始建立C#的脚本时要建立窗体,而不是控制台程序。之后建议根据界面,自己来写。还有别忘了Server和client建立两个程序哦。 图片分别为服务端,客户端。         代码:(designer.cs,Server) private void InitializeComponent()        ...

不咬人的冷血蛇 2680

C#实现Socket聊天室代码

C# 实现的Socket聊天室完整代码

C#socket聊天室

老师布置的作业,之后又完善了一下,个人感觉还不错

C#socket编程_TCPunity聊天室.01

此仅供自己学习 首先来熟悉下C#如何写服务器端和客户端的接收发送 在C#网络编程中,主要通过Socket类来创建链接,创建简单的消息接收和发送主要步骤分四步:创建socket,绑定IP和端口,监听连接,发送消息。具体看代码: //1.创建socket,实例化时第一个参数是内网,第二个是用什么通信,第三个是用什么协议 Socket tcpServer=new Socket(AddressFamily...

labylei的博客 239

C#socket编程_TCPunity聊天室.03

TCPlistener和TCPclient 这里说一下socket编程中的两个类TCPlistener和TCPclient,其中listener顾名思义就是监听,是服务器端用的类,TCPclient是客户端用的类,这两个类把socket封装好,当需要传输时可以直接调用,不需要重新定义socket。用listener和client步骤也是差不多,直接上代码: //1.创建TcpListen对sock...

labylei的博客 211

C#socket通信(服务器端与客户端实现简单的聊天室通信)

知识基础: 1.按网络覆盖范围,计算机网络可分类为广域网、城域网、局域网和Internet。 2.在TCP/IP网络中测试连通性的常用命令是Ping 命令,ipconfig。 3.Internet的核心协议是TCP/IP 。 4.IP地址127.0.0.1是一个测试地址。 5.Internet的前身是Arpanet 。 6.在企业内部网与外部网之间,用来检查网络请求分组是否合法,保护网络资源不被非...

qq_43551373的博客 1639

聊天室用户列表功能

实现类似聊天室的那种用户列表的功能,其基本原理是每次用户登陆到聊天室就给服务器发送一个消息,该消息可以是用户的IP地址、主机名或登陆昵称(这里为方便起见用的是主机名),然后服务器收到消息后就将该消息广播到连接到服务器的所有客户端,这样所有的用户就都有了一个包含其他用户消息的列表了。下面是简单的代码,仅测试这个功能。 服务器端代码:BOOL CCWINDlg::OnInitDialo

wanjingwei的专栏 2452

基于Socket聊天室源程序

基于Socket聊天室源程序 基于Socket聊天室源程序:聊天室主要由聊天室服务器聊天室客户端组成。聊天室服务器负责管理与客户端的连接并发送消息给客户端;客户端负责接收或者发送聊天消息,登录聊天室服务器等。 代码分客户端和服务器端代码。 源代码下载:点击下载 该代码来自《C#网络与通信程序设计案例精讲》 (吴晨,陈建孝;清华大学出版社)中的源代码。具体的设计过程可参考该书。

researchstep的专栏 1267
上一篇: C#同步异步
下一篇: C#序列化和反序列化
dfcj1010
博客等级 码龄16年 233粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值