简单的点对点聊天软件

2024-06-06 22:08
文章标签 简单 软件 聊天 点对点

本文主要是介绍简单的点对点聊天软件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/highplayer/article/details/5992311

在两台电脑上同时运行本程序,可以实现点对点的聊天。

输入对方IP,连接即可聊天。

源代码:

类ClassListener,监听通信信息。

[c-sharp]  view plain copy print ?
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Net;  
  6. using System.Threading;  
  7. using System.Net.Sockets;  
  8. using System.Windows.Forms;  
  9. namespace PToP  
  10. {  
  11.     public class AddMessageEventArge : EventArgs  
  12.     {  
  13.         public string mess; //定义一个全局变量  
  14.     }  
  15.     class ClassListener  
  16.     {  
  17.         private Thread th;  
  18.         private TcpListener tcp1;  
  19.         public bool listenerRun = true;  
  20.         public event EventHandler<AddMessageEventArge> OnAddMessage;  
  21.         //启动线程开始监听  
  22.         public void StartListen()  
  23.         {  
  24.             th = new Thread(new ThreadStart(Listen));  
  25.             th.Start();  
  26.         }  
  27.         //停止监听  
  28.         public void stop()  
  29.         {  
  30.             tcp1.Stop();  
  31.             th.Abort();  
  32.         }  
  33.         public void Listen()  
  34.         {  
  35.             try  
  36.             {  
  37.                 IPAddress addr = new IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);  
  38.                 IPEndPoint iplocalendpoint = new IPEndPoint(addr, 5656);  
  39.                 tcp1 = new TcpListener(iplocalendpoint);  
  40.                 tcp1.Start();  
  41.                 while (listenerRun)  
  42.                 {  
  43.                     Socket s = tcp1.AcceptSocket();  
  44.                     string remote = s.RemoteEndPoint.ToString();  
  45.                     Byte[] stream = new Byte[512];  
  46.                     int i = s.Receive(stream);  
  47.                     string msg = "<" + remote + ">" + System.Text.Encoding.UTF8.GetString(stream);  
  48.                      
  49.                     AddMessageEventArge arg = new AddMessageEventArge();  
  50.                     arg.mess = msg;  
  51.                     OnAddMessage(this, arg);  
  52.                 }  
  53.             }  
  54.             catch(Exception ex)  
  55.             {  
  56.                 MessageBox.Show(ex.ToString());  
  57.             }  
  58.         }  
  59.     }  
  60. }  

类ClassSender,实现发送聊天信息

[c-sharp]  view plain copy print ?
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Net.Sockets;  
  6. using System.Net;  
  7. using System.Threading;  
  8. using System.Windows.Forms;  
  9. namespace PToP  
  10. {  
  11.     class ClassSender  
  12.     {  
  13.         private string obj;  
  14.         public ClassSender(string str)  
  15.         {  
  16.             obj=str;  
  17.         }  
  18.         public void Send(string str)  
  19.         {  
  20.             try  
  21.             {  
  22.                 TcpClient tcpc = new TcpClient(obj, 5656);  
  23.                 NetworkStream tcpstream = tcpc.GetStream();  
  24.                 Byte[] data = System.Text.Encoding.ASCII.GetBytes(str);  
  25.                 tcpstream.Write(data, 0, data.Length);  
  26.                 tcpstream.Close();  
  27.                 tcpc.Close();  
  28.             }  
  29.             catch(Exception)  
  30.             {  
  31.                 MessageBox.Show("连接被目标主机拒绝!");  
  32.             }  
  33.         }  
  34.     }  
  35. }  

窗体代码中,添加连接目标计算机和发送聊天信息的程序

[c-sharp]  view plain copy print ?
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. using System.Net;  
  10. using System.Net.Sockets;  
  11. using System.Net.Security;  
  12. namespace PToP  
  13. {  
  14.     public partial class Form1 : Form  
  15.     {  
  16.         //定义委托  
  17.         public delegate void InvokeDelegate();   
  18.           
  19.         public bool appRun = true;  
  20.         private ClassListener Lie;  
  21.         private ClassSender sen;  
  22.   
  23.         string Strs = "";  
  24.   
  25.         public Form1()  
  26.         {  
  27.             InitializeComponent();  
  28.         }  
  29.           
  30.   
  31.         private void button3_Click(object sender, EventArgs e)  
  32.         {  
  33.             Application.Exit();  
  34.         }  
  35.   
  36.         private void Form1_Load(object sender, EventArgs e)  
  37.         {  
  38.               
  39.         }  
  40.   
  41.         //接收事件  
  42.         void Lie_OnAddMessage(object sender, AddMessageEventArge e)  
  43.         {  
  44.             Strs = e.mess.ToString();  
  45.             Invoke_Click(nullnull);  
  46.         }  
  47.   
  48.         //委托   
  49.   
  50.         private void Invoke_Click(object sender, EventArgs e)  
  51.         {  
  52.             textBox1.BeginInvoke(new InvokeDelegate(InvokeMethod));  
  53.         }  
  54.         public void InvokeMethod()  
  55.         {  
  56.             if (textBox1.Text == "")  
  57.             {  
  58.                 textBox1.Text = Strs;  
  59.             }  
  60.             else  
  61.             {  
  62.                 textBox1.Text = textBox1.Text + "/r/n" + Strs;  
  63.             }  
  64.         }  
  65.         //连接目标计算机  
  66.         private void button1_Click(object sender, EventArgs e)  
  67.         {  
  68.             try  
  69.             {  
  70.                 //连接  
  71.                 Lie.listenerRun = false;  
  72.                 Lie.stop();  
  73.             }  
  74.             catch (NullReferenceException) { ;}  
  75.             finally  
  76.             {  
  77.                 Lie = new ClassListener();  
  78.                 Lie.OnAddMessage +=new EventHandler<AddMessageEventArge>(Lie_OnAddMessage);  
  79.                 Lie.StartListen();  
  80.             }  
  81.         }  
  82.         //发送聊天记录信息  
  83.         private void button2_Click(object sender, EventArgs e)  
  84.         {  
  85.             if (textBox3.Text == "")  
  86.             {  
  87.                 MessageBox.Show("请输入目标主机的IP地址");  
  88.             }  
  89.             else if (textBox2.Text == "")  
  90.             {  
  91.                 MessageBox.Show("不能发送空信息!");  
  92.             }  
  93.             else  
  94.             {  
  95.                 IPAddress ipaddress = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);  
  96.                   
  97.                 if (textBox1.Text == "")  
  98.                 {  
  99.                     textBox1.Text = "<" + ipaddress.ToString() + "> " + textBox2.Text;  
  100.                 }  
  101.                 else  
  102.                 {  
  103.                     textBox1.Text =textBox1.Text +"/r/n""<" + ipaddress.ToString() + "> " + textBox2.Text;  
  104.                 }  
  105.                 sen = new ClassSender(textBox3.Text);  
  106.                 sen.Send(textBox2.Text);  
  107.             }  
  108.         }  
  109.   
  110.     }  
  111. }  


这篇关于简单的点对点聊天软件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037368

相关文章

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

SpringBoot整合Apache Spark实现一个简单的数据分析功能

《SpringBoot整合ApacheSpark实现一个简单的数据分析功能》ApacheSpark是一个开源的大数据处理框架,它提供了丰富的功能和API,用于分布式数据处理、数据分析和机器学习等任务... 目录第一步、添加android依赖第二步、编写配置类第三步、编写控制类启动项目并测试总结ApacheS

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder