实例解析SOCKET编程模型(二)

发布时间: 2007-05-21 09:41    作者: 未知    来源: 未知    浏览:    评论

以下是同步聊天程序的客户端源代码。其中的一些过程可以参考服务器端源码

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;
namespace 聊天_socket_client
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button btnStop;
private System.Windows.Forms.Button btnSend;
private System.Windows.Forms.TextBox txtPort;
private System.Windows.Forms.TextBox txtServer;
private System.Windows.Forms.RichTextBox rtbSend;
private System.Windows.Forms.RichTextBox rtbReceive;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.Button btnConnect;
private IPAddress hostIPAddress;
private IPEndPoint Server;
private Socket sock;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

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.label4 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.btnStop = new System.Windows.Forms.Button();
this.btnSend = new System.Windows.Forms.Button();
this.btnConnect = new System.Windows.Forms.Button();
this.txtPort = new System.Windows.Forms.TextBox();
this.txtServer = new System.Windows.Forms.TextBox();
this.rtbSend = new System.Windows.Forms.RichTextBox();
this.rtbReceive = new System.Windows.Forms.RichTextBox();
this.statusBar1 = new System.Windows.Forms.StatusBar();
this.SuspendLayout();
//
// label4
//
this.label4.Location = new System.Drawing.Point(16, 152);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(64, 23);
this.label4.TabIndex = 22;
this.label4.Text = "发送信息:";
//
// label3
//
this.label3.Location = new System.Drawing.Point(16, 64);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(64, 23);
this.label3.TabIndex = 21;
this.label3.Text = "接收信息:";
//
// label2
//
this.label2.Location = new System.Drawing.Point(216, 16);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(64, 23);
this.label2.TabIndex = 20;
this.label2.Text = "监听端口:";
//
// label1
//
this.label1.Location = new System.Drawing.Point(16, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(56, 23);
this.label1.TabIndex = 19;
this.label1.Text = "服务器:";
//
// btnStop
//
this.btnStop.Location = new System.Drawing.Point(256, 256);
this.btnStop.Name = "btnStop";
this.btnStop.TabIndex = 18;
this.btnStop.Text = "关闭连接";
this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
//
// btnSend
//
this.btnSend.Location = new System.Drawing.Point(144, 256);
this.btnSend.Name = "btnSend";
this.btnSend.TabIndex = 17;
this.btnSend.Text = "发送信息";
this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
//
// btnConnect
//
this.btnConnect.Location = new System.Drawing.Point(32, 256);
this.btnConnect.Name = "btnConnect";
this.btnConnect.TabIndex = 16;
this.btnConnect.Text = "请求连接";
this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
//
// txtPort
//
this.txtPort.Location = new System.Drawing.Point(288, 16);
this.txtPort.Name = "txtPort";
this.txtPort.Size = new System.Drawing.Size(48, 21);
this.txtPort.TabIndex = 15;
this.txtPort.Text = "19811";
//
// txtServer
//
this.txtServer.Location = new System.Drawing.Point(72, 16);
this.txtServer.Name = "txtServer";
this.txtServer.TabIndex = 14;
this.txtServer.Text = "127.0.0.1";
//
// rtbSend
//
this.rtbSend.Location = new System.Drawing.Point(80, 152);
this.rtbSend.Name = "rtbSend";
this.rtbSend.Size = new System.Drawing.Size(264, 96);
this.rtbSend.TabIndex = 13;
this.rtbSend.Text = "";
//
// rtbReceive
//
this.rtbReceive.Location = new System.Drawing.Point(80, 56);
this.rtbReceive.Name = "rtbReceive";
this.rtbReceive.Size = new System.Drawing.Size(264, 96);
this.rtbReceive.TabIndex = 12;
this.rtbReceive.Text = "";
//
// statusBar1
//
this.statusBar1.Location = new System.Drawing.Point(0, 287);
this.statusBar1.Name = "statusBar1";
this.statusBar1.ShowPanels = true;
this.statusBar1.Size = new System.Drawing.Size(360, 22);
this.statusBar1.TabIndex = 23;
this.statusBar1.Text = "statusBar1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(360, 309);
this.Controls.Add(this.statusBar1);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnStop);
this.Controls.Add(this.btnSend);
this.Controls.Add(this.btnConnect);
this.Controls.Add(this.txtPort);
this.Controls.Add(this.txtServer);
this.Controls.Add(this.rtbSend);
this.Controls.Add(this.rtbReceive);
this.Name = "Form1";
this.Text = "聊天程序-客户端";
this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void btnConnect_Click(object sender, System.EventArgs e)
{
try
{
hostIPAddress=IPAddress.Parse(txtServer.Text);
}
catch{MessageBox.Show("请输入正确的IP地址格式。");}
try
{
Server=new IPEndPoint(hostIPAddress,Int32.Parse(txtPort.Text));
sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
sock.Connect(Server);
statusBar1.Text="与主机"+txtServer.Text+"端口"+txtPort.Text+"连接成功";
Thread thread=new Thread(new ThreadStart(ThreadProc));
thread.Start();
}
catch(Exception ee){MessageBox.Show(ee.Message);}
}
private void ThreadProc()
{
while(true)
{
Byte[] ByteRecv=new Byte[256];
sock.Receive(ByteRecv,ByteRecv.Length,0);
string strRecv=Encoding.BigEndianUnicode.GetString(ByteRecv);
rtbReceive.AppendText(strRecv+"\r\n");
}
}

private void btnSend_Click(object sender, System.EventArgs e)
{
try
{
string strSend ="Client--->"+rtbSend.Text+"\r\n";
Byte[] ByteSend = Encoding.BigEndianUnicode.GetBytes(strSend);
sock.Send(ByteSend,ByteSend.Length,0);
}
catch{MessageBox.Show("连接尚未建立,无法发送.");}
}

private void btnStop_Click(object sender, System.EventArgs e)
{
try
{
sock.Close();
statusBar1.Text="与主机"+txtServer.Text+"端口"+txtPort.Text+"断开连接";
}
catch{MessageBox.Show("连接尚未建立,关闭无效");}
}

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
try
{
sock.Close();
}
catch{}
}
}
}

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多