C#实现Socket传输简单数据
[[wiki]wiki[/wiki]][/wiki]运行[wiki]程序[/wiki]后, 先要点击开始接收按钮后才能点击发送数据
Form1.cs代码如下
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.[wiki]windows[/wiki].Forms;using System.Net.Sockets;using System.IO;using System.Net;
namespace WinSocket...{ public partial class Form1 : Form ...{ BackgroundWorker bgWorker = null; public Form1() ...{ InitializeComponent(); bgWorker = new BackgroundWorker(); bgWorker.WorkerSupportsCancellation = tr[wiki]UE[/wiki]; this.AddEvent(); }
/**//// <summary> /// 注册事件 /// </summary> private void AddEvent() ...{ this.bgWorker.DoWork = new DoWorkEventHandler(bgWorker_DoWork); this.btnSend.Click = new EventHandler(btnSend_Click); this.btnStartReceive.Click = new EventHandler(btnStartReceive_Click); this.btnStopRecevie.Click = new EventHandler(btnStopRecevie_Click); }
void bgWorker_DoWork([wiki]object[/wiki] sender, DoWorkEventArgs e) ...{ Socket receiveSocket = new Socket(AddressFamily.InterNetwork, Socket[wiki]type[/wiki].Stream, ProtocolType.[wiki]TCP[/wiki]); IPEndPoint endpoint = new IPEndPoint(0, 8000);
receiveSocket.Bind(endpoint); receiveSocket.Listen(10);
try ...{ while (true) ...{ Socket tmpSocket = receiveSocket.Accept(); byte[] buffer = new byte[tmpSocket.ReceiveBufferSize]; if (tmpSocket.Receive(buffer) > 0) ...{ textBox2.Text = Encoding.UTF8.GetString(buffer) Environment.NewLine; } else ...{ System.Threading.Thread.Sleep(1000); }
} } catch(Exception err) ...{ MessageBox.Show(err.Message); } }
void btnStopRecevie_Click(object sender, EventArgs e) ...{ if (this.bgWorker.IsBusy) ...{ this.bgWorker.CancelAsync(); this.btnStartReceive.Enabled = true; this.btnStopRecevie.Enabled = false; } }
void btnStartReceive_Click(object sender, EventArgs e) ...{ this.btnStartReceive.Enabled = false; this.bgWorker.RunWorkerAsync(); this.btnStopRecevie.Enabled = true; }
void btnSend_Click(object sender, EventArgs e) ...{ Socket sendSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sendSocket.Connect("187.186.0.63", 8000);
byte[] buffer = Encoding.UTF8.GetBytes(textBox1.Text); sendSocket.Send(buffer); sendSocket.Shutdown(SocketShutdown.Both); sendSocket.Close(); }
private void Form1_Load(object sender, EventArgs e) ...{ this.btnStartReceive.Enabled = true; this.btnStopRecevie.Enabled = false; } }}Form.Designer.cs代码如下
namespace WinSocket...{ partial class Form1 ...{ /**//// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.IContainer components = null;
/**//// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="dis[wiki]POS[/wiki]ing">如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose(bool disposing) ...{ if (disposing && (components != null)) ...{ components.Dispose(); } base.Dispose(disposing); }
Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
/**//// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码[wiki]编辑[/wiki]器修改此方法的内容。 /// </summary> private void InitializeComponent() ...{ this.btnSend = new System.Windows.Forms.Button(); this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.btnStartReceive = new System.Windows.Forms.Button(); this.btnStopRecevie = new System.Windows.Forms.Button(); this.SuspendLayout(); // // btnSend // this.btnSend.Location = new System.Drawing.Point(164, 35); this.btnSend.Name = "btnSend"; this.btnSend.Size = new System.Drawing.Size(75, 23); this.btnSend.TabIndex = 0; this.btnSend.Text = "发送"; this.btnSend.UseVisualStyleBackColor = true; // // textBox1 // this.textBox1.Location = new System.Drawing.Point(24, 37); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(100, 21); this.textBox1.TabIndex = 1; // // textBox2 // this.textBox2.Location = new System.Drawing.Point(24, 123); this.textBox2.Multiline = true; this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(234, 131); this.textBox2.TabIndex = 2; // // btnStartReceive // this.btnStartReceive.Location = new System.Drawing.Point(24, 84); this.btnStartReceive.Name = "btnStartReceive"; this.btnStartReceive.Size = new System.Drawing.Size(75, 23); this.btnStartReceive.TabIndex = 3; this.btnStartReceive.Text = "开始接收"; this.btnStartReceive.UseVisualStyleBackColor = true; // // btnStopRecevie // this.btnStopRecevie.Location = new System.Drawing.Point(164, 84); this.btnStopRecevie.Name = "btnStopRecevie"; this.btnStopRecevie.Size = new System.Drawing.Size(75, 23); this.btnStopRecevie.TabIndex = 4; this.btnStopRecevie.Text = "停止接收"; this.btnStopRecevie.UseVisualStyleBackColor = true; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.btnStopRecevie); this.Controls.Add(this.btnStartReceive); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBox1); this.Controls.Add(this.btnSend); this.Name = "Form1"; this.Text = "Form1"; this.Load = new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnSend; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.Button btnStartReceive; private System.Windows.Forms.Button btnStopRecevie; }}