简单的点对点聊天软件

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

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money