天天看點

簡單的點對點聊天軟體

在兩台電腦上同時運作本程式,可以實作點對點的聊天。

輸入對方IP,連接配接即可聊天。

簡單的點對點聊天軟體

源代碼:

類ClassListener,監聽通信資訊。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.Threading;

using System.Net.Sockets;

using System.Windows.Forms;

namespace PToP

{

public class AddMessageEventArge : EventArgs

{

public string mess; //定義一個全局變量

}

class ClassListener

{

private Thread th;

private TcpListener tcp1;

public bool listenerRun = true;

public event EventHandler<AddMessageEventArge> OnAddMessage;

//啟動線程開始監聽

public void StartListen()

{

th = new Thread(new ThreadStart(Listen));

th.Start();

}

//停止監聽

public void stop()

{

tcp1.Stop();

th.Abort();

}

public void Listen()

{

try

{

IPAddress addr = new IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);

IPEndPoint iplocalendpoint = new IPEndPoint(addr, 5656);

tcp1 = new TcpListener(iplocalendpoint);

tcp1.Start();

while (listenerRun)

{

Socket s = tcp1.AcceptSocket();

string remote = s.RemoteEndPoint.ToString();

Byte[] stream = new Byte[512];

int i = s.Receive(stream);

string msg = "<" + remote + ">" + System.Text.Encoding.UTF8.GetString(stream);

AddMessageEventArge arg = new AddMessageEventArge();

arg.mess = msg;

OnAddMessage(this, arg);

}

}

catch(Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

}

}

類ClassSender,實作發送聊天資訊

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net.Sockets;

using System.Net;

using System.Threading;

using System.Windows.Forms;

namespace PToP

{

class ClassSender

{

private string obj;

public ClassSender(string str)

{

obj=str;

}

public void Send(string str)

{

try

{

TcpClient tcpc = new TcpClient(obj, 5656);

NetworkStream tcpstream = tcpc.GetStream();

Byte[] data = System.Text.Encoding.ASCII.GetBytes(str);

tcpstream.Write(data, 0, data.Length);

tcpstream.Close();

tcpc.Close();

}

catch(Exception)

{

MessageBox.Show("連接配接被目标主機拒絕!");

}

}

}

}

窗體代碼中,添加連接配接目标計算機和發送聊天資訊的程式

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Net.Security;

namespace PToP

{

public partial class Form1 : Form

{

//定義委托

public delegate void InvokeDelegate();

public bool appRun = true;

private ClassListener Lie;

private ClassSender sen;

string Strs = "";

public Form1()

{

InitializeComponent();

}

private void button3_Click(object sender, EventArgs e)

{

Application.Exit();

}

private void Form1_Load(object sender, EventArgs e)

{

}

//接收事件

void Lie_OnAddMessage(object sender, AddMessageEventArge e)

{

Strs = e.mess.ToString();

Invoke_Click(null, null);

}

//委托

private void Invoke_Click(object sender, EventArgs e)

{

textBox1.BeginInvoke(new InvokeDelegate(InvokeMethod));

}

public void InvokeMethod()

{

if (textBox1.Text == "")

{

textBox1.Text = Strs;

}

else

{

textBox1.Text = textBox1.Text + "/r/n" + Strs;

}

}

//連接配接目标計算機

private void button1_Click(object sender, EventArgs e)

{

try

{

//連接配接

Lie.listenerRun = false;

Lie.stop();

}

catch (NullReferenceException) { ;}

finally

{

Lie = new ClassListener();

Lie.OnAddMessage +=new EventHandler<AddMessageEventArge>(Lie_OnAddMessage);

Lie.StartListen();

}

}

//發送聊天記錄資訊

private void button2_Click(object sender, EventArgs e)

{

if (textBox3.Text == "")

{

MessageBox.Show("請輸入目标主機的IP位址");

}

else if (textBox2.Text == "")

{

MessageBox.Show("不能發送空資訊!");

}

else

{

IPAddress ipaddress = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);

if (textBox1.Text == "")

{

textBox1.Text = "<" + ipaddress.ToString() + "> " + textBox2.Text;

}

else

{

textBox1.Text =textBox1.Text +"/r/n"+ "<" + ipaddress.ToString() + "> " + textBox2.Text;

}

sen = new ClassSender(textBox3.Text);

sen.Send(textBox2.Text);

}

}

}

}