Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)qq
published in(发表于) 2014/7/11 9:29:26
IP聊天室实例

C#教程:开发TCP/IP聊天室实例|方法

开发TCP/IP聊天室

本示例通过TCP实现在客户端与服务器端计算机之间进行通信。本实例运行时,首先打开服务器端程序,输入用户名单击【登录】按钮完成服务器的开启;然后运行客户端程序,同时输入用户名,登录程序(这里的端口号都默认为11000),然后单击任何一方的【发送】按钮,对方将收到信息,并显示在自己的信息列表中。实例运行结果如图1和图2所示。



图1 “服务器”运行窗体



图2“客户端”运行窗体

服务器端实现的具体步骤如下所示。

(1)在VS2005项目中添加一个窗体。

(2)在窗体中添加3个TextBox文本框,分别用于获取用户名、显示与发送信息。

(3)在窗体中添加3个Button按钮和3个Label控件,分别用于激发事件和显示信息。

(4)程序主要代码。

首先添加对命名空间的引用,代码如下:

using System.Net;

using System.Threading;

using System.Net.Sockets;

然后定义在程序中要用到的变量,代码如下:

#region//定义变量

IPAddress HostIP = IPAddress.Parse("127.0.0.1");

IPEndPoint point;

Socket socket;

bool flag = True;

Socket acceptedSocket;

#endregion

单击【登录】按钮,实例化一个Socket对象,令其开始侦听,当侦听到信息时,开启一个新的进程,调用新的方法(Proccess)显示信息。【登录】按钮的Click事件代码如下:

private void button1_Click_1(object sender, EventArgs e)

{

HostIP = IPAddress.Parse("127.0.0.1");

try

{

point = new IPEndPoint(HostIP, Int32.Parse("11000"));

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,

ProtocolType.Tcp);

socket.Bind(point);

socket.Listen(50);

acceptedSocket = socket.Accept();

Thread thread = new Thread(new ThreadStart(Proccess));

thread.Start();

}

catch (Exception ey)

{

MessageBox.Show(ey.Message);

}

}

声明委托以及委托所要代理的事件,为进行调用控件作准备,代码如下:

#region//声明委托

delegate void SetTextCallback(string text);

private void SetText(string text)

{

textBox2.AppendText(text + "rn");

}

#endregion

进程所要调用的方法,用于显示来自其他机器的信息。代码如下:

#region//进程方法

private void Proccess()

{

if (acceptedSocket.Connected)

{

while (flag)

{

byte[] receiveByte = new byte[64];

acceptedSocket.Receive(receiveByte, receiveByte.Length, 0);

string strInfo = Encoding.BigEndianUnicode.GetString(receiveByte);

this.Invoke(new SetTextCallback(SetText), new object[] { strInfo });

}

}

}

#endregion

通过Socket类的Send方法,实现信息的发送。【发送】按钮的Click事件代码如下:

private void button2_Click_1(object sender, EventArgs e)

{

try

{

Byte[] sendByte = new Byte[64];

string sendStr = this.textBox1.Text + ":" + this.textBox3.Text + "rn";

sendByte = Encoding.BigEndianUnicode.GetBytes(sendStr.ToCharArray());

acceptedSocket.Send(sendByte, sendByte.Length, 0);

}

catch { }

}

客户端实现的具体步骤如下所示。

(1)在VS2005项目中添加一个窗体。

(2)在窗体中添加3个TextBox文本框,分别用于获取用户名、显示与发送信息。

(3)在窗体中添加3个Button按钮和3个Label标签,分别用于激发事件和显示信息。

(4)程序主要代码。

单击客户端窗体中的【登录】按钮,通过Socket类的Connect方法连接到指定的机器,同时也开启一下新的进程。【登录】按钮的Click事件代码如下:

private void button1_Click(object sender, EventArgs e)

{

HostIP = IPAddress.Parse("127.0.0.1");

try

{

point = new IPEndPoint(HostIP, Int32.Parse("11000"));

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,

ProtocolType.Tcp);

socket.Connect(point);

Thread thread = new Thread(new ThreadStart(Proccess));

thread.Start();

}

catch(Exception ey)

{

MessageBox.Show("服务器没有开启rn"+ey.Message);


If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759