c++多人聊天室,C#聊天室

c++多人聊天室,C#聊天室,C#实现简易多人聊天室

这篇文章主要为大家详细介绍了C#实现简易多人聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C#实现简易多人聊天室的具体代码,供大家参考,具体内容如下

只有一个群聊的功能

服务端

使用系统;

使用系统。集合。泛型;

使用系统。组件模型;

使用系统。数据;

使用系统。绘图;

使用系统100 . Linq

使用系统。网;

使用系统. Net。套接字

使用系统。文本;

使用系统。穿线;

使用系统。线程。任务;

使用系统窗户。形式

命名空间FinalChatRoomClient

{

公共分部类客户端:表单

{

//客户端负责接收服务端发来的数据消息的线程

线程线程客户端=空

//创建客户端套接字,负责连接服务器

套接字socketClient=null

公共客户端()

{

初始化组件();

//关闭对文本框跨线程操作的检查

文本框checkforillegalcrosthreadcalls=false;

}

私有void start_Click(对象发送方,EventArgs e)

{

//获得文本框中的互联网协议(互联网协议)地址对象

IP地址地址=地址.解析(txtIp .文字。trim());

//创建包含互联网协议(互联网协议)和端口的网络节点对象

IPEndPoint endPoint=new IPEndPoint(address,int .解析(txtPort .文字。trim()));

//创建客户端套接字,负责连接服务器

socketClient=新套接字(地址家庭.互联网,SocketType .流,协议类型. TCP);

尝试

{

//客户端连接到服务器

socketClient .连接(端点);

ShowMsg('客户端连接服务器成功');

}

catch (SocketException ex)

{

ShowMsg('客户端连接服务器发生异常:'例如.消息);

}

接住(例外ex)

{

ShowMsg('客户端连接服务器发生异常:'例如.消息);

}

线程客户端=新线程(接收msg);

线程客户端IsBackground=true

线程客户端. start();

}

私有void btnSend_Click(对象发送方,EventArgs e)

{

字符串strMsg=txtMsg .文字。trim();

//将字符串转成方便网络传送的二进制数组

字节[] arrMsg=编码10 . UTF8。GetBytes(strMsg);

byte[] arrMsgSend=新字节arrMsg .长度1];

arrMsgSend[0]=0;//设置标识位,0代表发送的是文字

缓冲BlockCopy(arrMsg,0,arrMsgSend,1,arrMsg .长度);

尝试

{

socketClient .send(arrMsgSend);

//清空发送消息文本框中的消息

这个。txtmsg。text=

}

catch (SocketException ex)

{

ShowMsg('客户端发送消息时发生异常:'例如.消息);

}

接住(例外ex)

{

ShowMsg('客户端发送消息时发生异常:'例如.消息);

}

}

私有void ShowMsg(字符串消息)

{

txtRecord .追加文本(msg ' \ r \ n ');

}

私有void ReceiveMsg()

{

而(真)

{

//定义一个接收消息用的字节数组缓冲区(2M大小)

byte[] arrMsgRev=新字节[1024 * 1024 * 2];

//将接收到的数据存入arrMsgRev,并返回真正接收到数据的长度

int length=-1;

尝试

{

长度=socketClient .接收(arrMsgRev);

}

catch (SocketException ex)

{

ShowMsg('客户端接收消息时发生异常:'例如.消息);

打破;

}

接住(例外ex)

{

消息框.显示('客户端接收消息时发生异常:'例如.消息);

打破;

}

//此时是将数组的所有元素(每个字节)都转成字符串,而真正接收到只有服务端发来的几个字符

string strMsgReceive=Encoding .UTF8。GetString(arrMsgRev,0,length);

控制台WriteLine(strmsgreece);

ShowMsg(strmsg receive);

}

}

}

}

客户端

使用系统;

使用系统。集合。泛型;

使用系统。组件模型;

使用系统。数据;

使用系统。绘图;

使用系统100 . Linq

使用系统。网;

使用系统. Net。套接字

使用系统。文本;

使用系统。穿线;

使用系统。线程。任务;

使用系统窗户。形式

命名空间FinalChatRoomClient

{

公共分部类客户端:表单

{

//客户端负责接收服务端发来的数据消息的线程

线程线程客户端=空

//创建客户端套接字,负责连接服务器

套接字socketClient=null

公共客户端()

{

初始化组件();

//关闭对文本框跨线程操作的检查

文本框checkforillegalcrosthreadcalls=false;

}

私有void start_Click(对象发送方,EventArgs e)

{

//获得文本框中的互联网协议(互联网协议)地址对象

IP地址地址=地址.解析(txtIp .文字。trim());

//创建包含互联网协议(互联网协议)和端口的网络节点对象

IPEndPoint endPoint=new IPEndPoint(address,int .解析(txtPort .文字。trim()));

//创建客户端套接字,负责连接服务器

socketClient=新套接字(地址家庭.互联网,SocketType .流,协议类型. TCP);

尝试

{

//客户端连接到服务器

socketClient .连接(端点);

ShowMsg('客户端连接服务器成功');

}

catch (SocketException ex)

{

ShowMsg('客户端连接服务器发生异常:'例如.消息);

}

接住(例外ex)

{

ShowMsg('客户端连接服务器发生异常:'例如.消息);

}

线程客户端=新线程(接收msg);

线程客户端IsBackground=true

线程客户端. start();

}

私有void btnSend_Click(对象发送方,EventArgs e)

{

字符串strMsg=txtMsg .文字。trim();

//将字符串转成方便网络传送的二进制数组

字节[] arrMsg=编码10 . UTF8。GetBytes(strMsg);

byte[] arrMsgSend=新字节arrMsg .长度1];

arrMsgSend[0]=0;//设置标识位,0代表发送的是文字

缓冲BlockCopy(arrMsg,0,arrMsgSend,1,arrMsg .长度);

尝试

{

socketClient .send(arrMsgSend);

//清空发送消息文本框中的消息

这个。txtmsg。text=

}

catch (SocketException ex)

{

ShowMsg('客户端发送消息时发生异常:'例如.消息);

}

接住(例外ex)

{

ShowMsg('客户端发送消息时发生异常:'例如.消息);

}

}

私有void ShowMsg(字符串消息)

{

txtRecord .追加文本(msg ' \ r \ n ');

}

私有void ReceiveMsg()

{

而(真)

{

//定义一个接收消息用的字节数组缓冲区(2M大小)

byte[] arrMsgRev=新字节[1024 * 1024 * 2];

//将接收到的数据存入arrMsgRev,并返回真正接收到数据的长度

int length=-1;

尝试

{

长度=socketClient .接收(arrMsgRev);

}

catch (SocketException ex)

{

ShowMsg('客户端接收消息时发生异常:'例如.消息);

打破;

}

接住(例外ex)

{

消息框.显示('客户端接收消息时发生异常:'例如.消息);

打破;

}

//此时是将数组的所有元素(每个字节)都转成字符串,而真正接收到只有服务端发来的几个字符

string strMsgReceive=Encoding .UTF8。GetString(arrMsgRev,0,length);

控制台WriteLine(strmsgreece);

ShowMsg(strmsg receive);

}

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: