简单的点对点聊天软件

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实现一个简单的题库与在线考试系统

《基于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.应用程序文件夹打开应用程序文件夹

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i