点对点的聊天:
namespace Chat
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Thread listenthread;//表示监听的线程
private string msg; //要发送的消息
private Socket socket1; //Socket类用于接收和发送信息
private IPEndPoint lep;
private void listenstart()//监听发入的信息
{
try
{
while (this.socket1.Connected)
{
//设置一个缓冲区
Byte[] stream = new Byte[1024];
socket1.Receive(stream);
//将获得的流转化为字符串类型
string message = Encoding.Default.GetString(stream);
//this.textBox1.Text=socket1.Available.ToString();
this.richTextBox2.AppendText(message);
this.richTextBox2.AppendText(" ");
}
}
catch//(Exception error)
{
if (!this.socket1.Connected)
{
socket1.Close();
button3.Enabled = true;
button5.Enabled = true;
}
}
}
private void button1_Click(object sender, System.EventArgs e)
{
//获取本地主机名称
string host = Dns.GetHostName();
this.textBox1.Text = host;
//获取本机IP
IPAddress[] addrs = Dns.Resolve("localhost").AddressList;
IPAddress addr = Dns.Resolve(host).AddressList[0];
//转化为标准的以点分隔的四部分格式
this.textBox2.Text = addr.ToString();
}
private void button3_Click(object sender, EventArgs e)
{
//获得监听端口
int hostport;
try
{
hostport = Int32.Parse(this.textBox5.Text);
if (hostport < 135 || hostport > 65400) hostport = 12800;
}
catch
{
hostport = 12800;
}
//IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];
IPAddress ipAddress = IPAddress.Parse("0.0.0.0");
lep = new IPEndPoint(ipAddress, hostport);
socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
socket1.Bind(lep);
socket1.Listen(10000);
this.statusBar1.Text = "等待连接...";
button3.Enabled = false;
button5.Enabled = false;
Thread watt = new Thread(new ThreadStart(waits));
watt.Start();
}
catch
{
button3.Enabled = true;
}
}
private void waits()
{
try
{
socket1 = socket1.Accept();
this.statusBar1.Text = "已建立连接";
listenthread = new Thread(new ThreadStart(listenstart));
listenthread.Start();
button3.Enabled = false;
button5.Enabled = false;
}
catch
{
button3.Enabled = true;
button5.Enabled = true;
}
}
private void button2_Click(object sender, EventArgs e)
{
if(socket1.Connected)
{
//将发送的字符串转换成字节数组
msg = "<"+this.textBox3.Text+">"+this.richTextBox1.Text;
Byte[] bytes=Encoding.Default.GetBytes(msg);
//发送数组
try
{
socket1.Send(bytes,bytes.Length,SocketFlags.None);
this.richTextBox1.Text="";
}
catch
{
}
//this.richTextBox2.AppendText(msg);
}
}
private void button4_Click(object sender, EventArgs e)
{
this.richTextBox2.Text = "";
}
private void button5_Click(object sender, EventArgs e)
{
//获得连接端口
int hostport;
try
{
hostport=Int32.Parse(this.textBox6.Text);
if(hostport<135||hostport>65400)hostport=12800;
}
catch
{
hostport=30000;
}
try
{
//得到需连接的地址
lep = new IPEndPoint(IPAddress.Parse(this.textBox4.Text),hostport);
}
catch(Exception err)
{
MessageBox.Show(err.Message);
}
//构造socket1实例,并请求连接
socket1= new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
socket1.Connect(lep);
if(socket1.Connected)this.statusBar1.Text="连接成功";
//开始监听
listenthread=new Thread(new ThreadStart(listenstart));
listenthread.Start();
button5.Enabled=false;
button3.Enabled=false;
}
catch
{
button5.Enabled=true;
button3.Enabled=true;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
socket1.Close();
if (this.listenthread!=null)
{
//如果线程还处于运行状态就关闭它
if (this.listenthread.ThreadState==ThreadState.Running)
{
this.listenthread.Abort();
}
}
}
catch
{
}
}
}
}
本文介绍了一个简单的点对点聊天系统的实现方法,包括客户端之间的连接建立、消息发送与接收等核心功能。通过使用Socket编程技术,实现了客户端之间的直接通信,并能够处理客户端的连接与断开。
710

被折叠的 条评论
为什么被折叠?



