简单的点对点聊天软件

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 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(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. }  


你可能感兴趣的:(网络编程)