简单的点对点聊天软件

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

相关文章

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

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹