您的位置:首页 > 编程语言 > C#

.net 中使用socket (c#)

2006-07-03 09:30 351 查看
前几天在网上看到关于使用socket 编写聊天程序的一个例子,学习了一下,网上的例子是VB.NET的,自己改写成了C#的 大同小异,只作为记录 :

[align=left]发送端
================================[/align]
[align=left]using System;[/align]
[align=left]using System.Drawing;[/align]
[align=left]using System.Collections;[/align]
[align=left]using System.ComponentModel;[/align]
[align=left]using System.Windows.Forms;[/align]
[align=left] [/align]
[align=left]namespace CSClientTest[/align]
[align=left]{[/align]
[align=left] ///<summary>[/align]
[align=left] /// sendform 的摘要说明。[/align]
[align=left] ///</summary>[/align]
[align=left] public class sendform : System.Windows.Forms.Form[/align]
[align=left] {[/align]
[align=left] private System.Windows.Forms.TextBox textBox1;[/align]
[align=left] private System.Windows.Forms.Button button1;[/align]
[align=left] private System.Windows.Forms.Label label1;[/align]
[align=left] ///<summary>[/align]
[align=left] ///必需的设计器变量。[/align]
[align=left] ///</summary>[/align]
[align=left] private System.ComponentModel.Container components = null;[/align]
[align=left] [/align]
[align=left] public sendform()[/align]
[align=left] {[/align]
[align=left] //[/align]
[align=left] // Windows 窗体设计器支持所必需的[/align]
[align=left] //[/align]
[align=left] InitializeComponent();[/align]
[align=left] [/align]
[align=left] //[/align]
[align=left] // TODO: 在 InitializeComponent 调用后添加任何构造函数代码[/align]
[align=left] //[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///清理所有正在使用的资源。[/align]
[align=left] ///</summary>[/align]
[align=left] protected override void Dispose( bool disposing )[/align]
[align=left] {[/align]
[align=left] if( disposing )[/align]
[align=left] {[/align]
[align=left] if(components != null)[/align]
[align=left] {[/align]
[align=left] components.Dispose();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] base.Dispose( disposing );[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] #region Windows 窗体设计器生成的代码[/align]
[align=left] ///<summary>[/align]
[align=left] ///设计器支持所需的方法 - 不要使用代码编辑器修改[/align]
[align=left] ///此方法的内容。[/align]
[align=left] ///</summary>[/align]
[align=left] private void InitializeComponent()[/align]
[align=left] {[/align]
[align=left] this.textBox1 = new System.Windows.Forms.TextBox();[/align]
[align=left] this.button1 = new System.Windows.Forms.Button();[/align]
[align=left] this.label1 = new System.Windows.Forms.Label();[/align]
[align=left] this.SuspendLayout();[/align]
[align=left] // [/align]
[align=left] // textBox1[/align]
[align=left] // [/align]
[align=left] this.textBox1.Location = new System.Drawing.Point(96, 144);[/align]
[align=left] this.textBox1.Name = "textBox1";[/align]
[align=left] this.textBox1.Size = new System.Drawing.Size(200, 21);[/align]
[align=left] this.textBox1.TabIndex = 0;[/align]
[align=left] this.textBox1.Text = "";[/align]
[align=left] // [/align]
[align=left] // button1[/align]
[align=left] // [/align]
[align=left] this.button1.Location = new System.Drawing.Point(320, 144);[/align]
[align=left] this.button1.Name = "button1";[/align]
[align=left] this.button1.TabIndex = 1;[/align]
[align=left] this.button1.Text = "sender";[/align]
[align=left] this.button1.Click += new System.EventHandler(this.button1_Click);[/align]
[align=left] // [/align]
[align=left] // label1[/align]
[align=left] // [/align]
[align=left] this.label1.Location = new System.Drawing.Point(0, 0);[/align]
[align=left] this.label1.Name = "label1";[/align]
[align=left] this.label1.Size = new System.Drawing.Size(608, 112);[/align]
[align=left] this.label1.TabIndex = 2;[/align]
[align=left] // [/align]
[align=left] // sendform[/align]
[align=left] // [/align]
[align=left] this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);[/align]
[align=left] this.ClientSize = new System.Drawing.Size(616, 238);[/align]
[align=left] this.Controls.Add(this.label1);[/align]
[align=left] this.Controls.Add(this.button1);[/align]
[align=left] this.Controls.Add(this.textBox1);[/align]
[align=left] this.Name = "sendform";[/align]
[align=left] this.Text = "sendform";[/align]
[align=left] this.Load += new System.EventHandler(this.sendform_Load);[/align]
[align=left] this.ResumeLayout(false);[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] private void sendform_Load(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void button1_Click(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] //定义一个socket对象[/align]
[align=left] System.Net.Sockets.Socket socket= new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,System.Net.Sockets.SocketType.Stream,System.Net.Sockets.ProtocolType.Tcp);[/align]
[align=left] [/align]
[align=left] //定义一个字节数组[/align]
[align=left] byte[] b = new byte[1024];[/align]
[align=left] [/align]
[align=left] //从文本框中获得数据转换为字节数组后存入b[/align]
[align=left] b=System.Text.Encoding.UTF8.GetBytes(textBox1.Text);[/align]
[align=left] [/align]
[align=left] //定义目的端的IP和端口[/align]
[align=left] System.Net.IPEndPoint ep = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"),1022);[/align]
[align=left] [/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] //连接到目的端[/align]
[align=left] socket.Connect(ep);[/align]
[align=left] [/align]
[align=left] //用socket的send方法发送数据,该方法返回发送的数据的字节数[/align]
[align=left] label1.Text="数据已发送,总共:"+socket.Send(b).ToString()+"字节";[/align]
[align=left] [/align]
[align=left] //禁止并关闭socket[/align]
[align=left] socket.Shutdown(System.Net.Sockets.SocketShutdown.Both);[/align]
[align=left] [/align]
[align=left] socket.Close();[/align]
[align=left] }[/align]
[align=left] catch(System.Exception ex)[/align]
[align=left] {[/align]
[align=left] label1.Text=ex.Message.ToString();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left]}[/align]

[align=left]接收端
================================[/align]
[align=left]using System;[/align]
[align=left]using System.Drawing;[/align]
[align=left]using System.Collections;[/align]
[align=left]using System.ComponentModel;[/align]
[align=left]using System.Windows.Forms;[/align]
[align=left] [/align]
[align=left]namespace CSClientTest[/align]
[align=left]{[/align]
[align=left] ///<summary>[/align]
[align=left] /// receive 的摘要说明。[/align]
[align=left] ///</summary>[/align]
[align=left] public class receive : System.Windows.Forms.Form[/align]
[align=left] {[/align]
[align=left] private System.Windows.Forms.Button button1;[/align]
[align=left] private System.Windows.Forms.TextBox textBox1;[/align]
[align=left] ///<summary>[/align]
[align=left] ///必需的设计器变量。[/align]
[align=left] ///</summary>[/align]
[align=left] private System.ComponentModel.Container components = null;[/align]
[align=left] [/align]
[align=left] //定义一个全局的socket以便监听和接收数据[/align]
[align=left] System.Net.Sockets.Socket socket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,System.Net.Sockets.SocketType.Stream,System.Net.Sockets.ProtocolType.Tcp);[/align]
[align=left] [/align]
[align=left] public receive()[/align]
[align=left] {[/align]
[align=left] //[/align]
[align=left] // Windows 窗体设计器支持所必需的[/align]
[align=left] //[/align]
[align=left] InitializeComponent();[/align]
[align=left] [/align]
[align=left] //[/align]
[align=left] // TODO: 在 InitializeComponent 调用后添加任何构造函数代码[/align]
[align=left] //[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///清理所有正在使用的资源。[/align]
[align=left] ///</summary>[/align]
[align=left] protected override void Dispose( bool disposing )[/align]
[align=left] {[/align]
[align=left] if( disposing )[/align]
[align=left] {[/align]
[align=left] if(components != null)[/align]
[align=left] {[/align]
[align=left] components.Dispose();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] base.Dispose( disposing );[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] #region Windows 窗体设计器生成的代码[/align]
[align=left] ///<summary>[/align]
[align=left] ///设计器支持所需的方法 - 不要使用代码编辑器修改[/align]
[align=left] ///此方法的内容。[/align]
[align=left] ///</summary>[/align]
[align=left] private void InitializeComponent()[/align]
[align=left] {[/align]
[align=left] this.button1 = new System.Windows.Forms.Button();[/align]
[align=left] this.textBox1 = new System.Windows.Forms.TextBox();[/align]
[align=left] this.SuspendLayout();[/align]
[align=left] // [/align]
[align=left] // button1[/align]
[align=left] // [/align]
[align=left] this.button1.Location = new System.Drawing.Point(448, 184);[/align]
[align=left] this.button1.Name = "button1";[/align]
[align=left] this.button1.TabIndex = 0;[/align]
[align=left] this.button1.Text = "接受";[/align]
[align=left] this.button1.Click += new System.EventHandler(this.button1_Click);[/align]
[align=left] // [/align]
[align=left] // textBox1[/align]
[align=left] // [/align]
[align=left] this.textBox1.Location = new System.Drawing.Point(224, 184);[/align]
[align=left] this.textBox1.Name = "textBox1";[/align]
[align=left] this.textBox1.Size = new System.Drawing.Size(208, 21);[/align]
[align=left] this.textBox1.TabIndex = 1;[/align]
[align=left] this.textBox1.Text = "";[/align]
[align=left] // [/align]
[align=left] // receive[/align]
[align=left] // [/align]
[align=left] this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);[/align]
[align=left] this.ClientSize = new System.Drawing.Size(664, 266);[/align]
[align=left] this.Controls.Add(this.textBox1);[/align]
[align=left] this.Controls.Add(this.button1);[/align]
[align=left] this.Name = "receive";[/align]
[align=left] this.Text = "receive";[/align]
[align=left] this.Load += new System.EventHandler(this.receive_Load);[/align]
[align=left] this.ResumeLayout(false);[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] private void receive_Load(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] //定义本地接收端IP和端口[/align]
[align=left] System.Net.IPEndPoint ep = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"),1022);[/align]
[align=left] [/align]
[align=left] //socket绑定本地接收端[/align]
[align=left] socket.Bind(ep);[/align]
[align=left] [/align]
[align=left] //监听,监听挂起10[/align]
[align=left] socket.Listen(10);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void button1_Click(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] if(socket.Blocking)[/align]
[align=left] {[/align]
[align=left] //为新建连接创建新的 Socket[/align]
[align=left] System.Net.Sockets.Socket socket1=socket.Accept();[/align]
[align=left] [/align]
[align=left] //定义一个字节数组[/align]
[align=left] byte[] b = new byte[1024];[/align]
[align=left] [/align]
[align=left] //将接收到的字节数组存入b中[/align]
[align=left] socket1.Receive(b);[/align]
[align=left] [/align]
[align=left] //将B中的数据转换为字符串后显示到textbox[/align]
[align=left] textBox1.Text = System.Text.Encoding.UTF8.GetString(b);[/align]
[align=left] [/align]
[align=left] //禁止并关闭这个新的socket连接[/align]
[align=left] socket1.Shutdown(System.Net.Sockets.SocketShutdown.Both);[/align]
[align=left] socket1.Close();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] catch[/align]
[align=left] {[/align]
[align=left] textBox1.Text = "无数据";[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] }[/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: