实例介绍
【实例简介】支持客户端与客户端发送消息
【实例截图】
【核心代码】
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace WindowsApplication1
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.RichTextBox richTextBox2;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.StatusBarPanel statusBarPanel1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private TcpClient Client;
private Thread thread;
private bool control = false;
private NetworkStream stream;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.statusBar1 = new System.Windows.Forms.StatusBar();
this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.label5 = new System.Windows.Forms.Label();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.richTextBox2 = new System.Windows.Forms.RichTextBox();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.textBox3);
this.groupBox1.Location = new System.Drawing.Point(248, 4);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(272, 60);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "注册用户名";
//
// textBox3
//
this.textBox3.Location = new System.Drawing.Point(24, 24);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(232, 21);
this.textBox3.TabIndex = 0;
//
// label1
//
this.label1.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.Location = new System.Drawing.Point(16, 12);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(80, 16);
this.label1.TabIndex = 1;
this.label1.Text = "服务器:";
//
// label2
//
this.label2.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.Location = new System.Drawing.Point(256, 80);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(104, 16);
this.label2.TabIndex = 2;
this.label2.Text = "信息发送到:";
//
// label4
//
this.label4.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label4.Location = new System.Drawing.Point(16, 40);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(56, 16);
this.label4.TabIndex = 4;
this.label4.Text = "端口:";
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(96, 12);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(136, 21);
this.textBox1.TabIndex = 5;
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(96, 40);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(136, 21);
this.textBox2.TabIndex = 6;
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(16, 120);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(405, 68);
this.richTextBox1.TabIndex = 7;
this.richTextBox1.Text = "";
//
// statusBar1
//
this.statusBar1.Location = new System.Drawing.Point(0, 362);
this.statusBar1.Name = "statusBar1";
this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
this.statusBarPanel1});
this.statusBar1.ShowPanels = true;
this.statusBar1.Size = new System.Drawing.Size(528, 16);
this.statusBar1.TabIndex = 9;
//
// statusBarPanel1
//
this.statusBarPanel1.Name = "statusBarPanel1";
this.statusBarPanel1.Width = 200;
//
// button1
//
this.button1.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button1.Location = new System.Drawing.Point(16, 72);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(104, 32);
this.button1.TabIndex = 10;
this.button1.Text = "请求连接";
this.button1.Click = new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Enabled = false;
this.button2.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button2.Location = new System.Drawing.Point(136, 72);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(96, 32);
this.button2.TabIndex = 11;
this.button2.Text = "关闭连接";
this.button2.Click = new System.EventHandler(this.button2_Click);
//
// button3
//
this.button3.Enabled = false;
this.button3.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button3.Location = new System.Drawing.Point(440, 120);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(80, 32);
this.button3.TabIndex = 12;
this.button3.Text = "发 送";
this.button3.Click = new System.EventHandler(this.button3_Click);
//
// label5
//
this.label5.Font = new System.Drawing.Font("宋体", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label5.Location = new System.Drawing.Point(16, 194);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(88, 16);
this.label5.TabIndex = 13;
this.label5.Text = "接收信息:";
//
// comboBox1
//
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.Location = new System.Drawing.Point(360, 80);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(152, 20);
this.comboBox1.TabIndex = 14;
//
// richTextBox2
//
this.richTextBox2.Location = new System.Drawing.Point(16, 222);
this.richTextBox2.Name = "richTextBox2";
this.richTextBox2.Size = new System.Drawing.Size(496, 134);
this.richTextBox2.TabIndex = 15;
this.richTextBox2.Text = "";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(528, 378);
this.Controls.Add(this.richTextBox2);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.label5);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.statusBar1);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label4);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.groupBox1);
this.Name = "Form1";
this.Text = "聊天客户端";
this.Closing = new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
this.Load = new System.EventHandler(this.Form1_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (Client != null && Client.Connected)
CloseConnection();
}
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, System.EventArgs e)
{
IPAddress myIP = IPAddress.Parse("127.0.0.1");
IPEndPoint MyServer;
int myPort = 0;
try
{
myIP = IPAddress.Parse(textBox1.Text);
myPort = Int32.Parse(textBox2.Text);
}
catch
{
MessageBox.Show("输入的IP地址或端口格式不正确,请重新输入!");
}
try
{
MyServer = new IPEndPoint(myIP, myPort);
Client = new TcpClient();
Client.Connect(MyServer);
statusBarPanel1.Text = " 与主机" textBox1.Text " 端 口"
textBox2.Text "连接成功!";
string userName = textBox3.Text;
Byte[] bta = System.Text.Encoding.Default.GetBytes(userName.ToCharArray());
stream = Client.GetStream();
stream.Write(bta, 0, bta.Length);
stream.Flush();
control = true;
thread = new Thread(new ThreadStart(targett));
thread.Start();
button2.Enabled = true;
button3.Enabled = true;
button1.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void targett()
{
while (control)
{
Byte[] bta = new Byte[4096];
try
{
int p, q;
if (stream.DataAvailable)
{
p = stream.Read(bta, 0, 4096);
string s1 = System.Text.Encoding.Default.GetString(bta, 0, p);
if (s1.Length > 3)
{
string option = s1.Substring(0, 3);
s1 = s1.Remove(0, 3);
if (option == "$$$") //该消息用于刷新用户列表
GetUserList(s1);
else
if (option == ">>>")
{
p = s1.IndexOf(",", 0, s1.Length);
q = s1.IndexOf(":", 0, s1.Length);
string s2 = s1.Substring(0, p);
string s3 = s1.Substring(p 1, q - p - 1);
richTextBox2.AppendText(s2 "对" s3
"说" s1.Remove(0, q));
}
}
}
}
catch
{
MessageBox.Show("数据接收错误,已被迫关闭连接!");
try
{
Client.Close();
}
finally
{
control = false;
}
statusBarPanel1.Text = " 与主机" textBox1.Text " 端口"
textBox2.Text "断开连接!";
comboBox1.Items.Clear();
button1.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
stream.Close();
break;
}
Thread.Sleep(500);
}
}
private void GetUserList(string UserList)
{
comboBox1.Items.Clear();
StringReader sr = new StringReader(UserList);
while (sr.Peek() >= 0)
comboBox1.Items.Add(sr.ReadLine());
sr.Close();
}
private void CloseConnection()
{
string msg = "***" textBox3.Text;
Byte[] bta = new Byte[1024];
bta = System.Text.Encoding.Default.GetBytes(msg.ToCharArray());
try
{
stream.Write(bta, 0, bta.Length);
stream.Flush();
control = false;
Client.Close();
statusBarPanel1.Text = " 与主机" textBox1.Text " 端口"
textBox2.Text "断开连接!";
comboBox1.Items.Clear();
button1.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
}
catch
{
MessageBox.Show("连接未能断开!");
}
}
private void button2_Click(object sender, System.EventArgs e)
{
CloseConnection();
}
private void button3_Click(object sender, System.EventArgs e)
{
if (comboBox1.Text == "")
{
MessageBox.Show("请选择信息接收者");
return;
}
try
{
string msg = ">>>" textBox3.Text "," comboBox1.Text ":"
richTextBox1.Text "\r\n"; //发送消息头部指定接受者
Byte[] bta = System.Text.Encoding.Default.GetBytes(msg.ToCharArray());
stream.Write(bta, 0, bta.Length);
stream.Flush();
}
catch
{
MessageBox.Show("信息无法正确发送!");
}
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论