下面我将为您详细讲解“C#聊天程序服务端与客户端完整实例代码”的完整攻略。
关于“C#聊天程序服务端与客户端完整实例代码”
这是一篇介绍如何使用C#语言实现聊天程序的完整攻略。其中包括服务端和客户端的完整代码。
服务端使用C#语言实现,使用TCP协议进行通信。并且,服务端为多线程模型,能够同时处理多个客户端连接请求。
客户端使用C#语言实现,可以与服务端建立连接,并且实现了在线聊天的功能。
实现步骤
下面是这篇攻略的实现步骤:
1. 创建服务端代码
服务端代码主要包括以下几个部分:
a. 建立TCP监听端口
在服务端代码中,我们需要先建立一个TCP监听端口来接收客户端的连接请求。
TcpListener listener = new TcpListener(IPAddress.Any, 8088);
listener.Start();
b. 接收客户端连接请求
接下来,我们需要使用AcceptTcpClient()函数接收客户端的连接请求,并且为每个连接请求创建一个线程来接收和处理客户端发送的数据。
while (true)
{
TcpClient client = listener.AcceptTcpClient();
Thread clientThread = new Thread(handleClientRequest);
clientThread.Start(client);
}
c. 接收并处理客户端数据
对于每个客户端连接请求,我们需要在一个独立的线程中接收和处理客户端发送的数据。我们可以使用StreamReader类和StreamWriter类来读取和写入数据。
private static void handleClientRequest(object obj)
{
TcpClient client = (TcpClient)obj;
StreamReader reader = new StreamReader(client.GetStream());
StreamWriter writer = new StreamWriter(client.GetStream());
while (true)
{
string data = reader.ReadLine();
Console.WriteLine("Received: {0}", data);
writer.WriteLine("Server Respond: " + data);
writer.Flush();
}
}
2. 创建客户端代码
客户端代码主要包括以下几个部分:
a. 建立连接
在客户端代码中,我们需要先建立到服务端的TCP连接。
TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse("127.0.0.1"), 8088);
b. 发送数据
在建立连接后,我们可以使用StreamWriter类向服务端发送数据。
StreamWriter writer = new StreamWriter(client.GetStream());
string data = "Hello, server";
writer.WriteLine(data);
writer.Flush();
c. 接收并处理服务端数据
对于接收和处理服务端数据,我们可以使用StreamReader类读取服务端发送的数据。
StreamReader reader = new StreamReader(client.GetStream());
while (true)
{
string data = reader.ReadLine();
Console.WriteLine("Received: {0}", data);
}
示例说明
这里提供两个示例说明:
示例一
在这个示例中,我们假设有两个客户端(A和B)连接到了服务端。当A发送一个消息给服务端时,服务端将该消息转发给B。
服务端代码如下:
//服务端代码
private static List<TcpClient> clients = new List<TcpClient>();
static void Main(string[] args)
{
TcpListener listener = new TcpListener(IPAddress.Any, 8088);
listener.Start();
Console.WriteLine("Server started.");
while (true)
{
TcpClient client = listener.AcceptTcpClient();
clients.Add(client);
Thread clientThread = new Thread(handleClientRequest);
clientThread.Start(client);
}
}
private static void handleClientRequest(object obj)
{
TcpClient client = (TcpClient)obj;
StreamReader reader = new StreamReader(client.GetStream());
StreamWriter writer = new StreamWriter(client.GetStream());
while (true)
{
string data = reader.ReadLine();
Console.WriteLine("Received: {0}", data);
foreach (TcpClient cl in clients)
{
if (cl != client)
{
StreamWriter writer2 = new StreamWriter(cl.GetStream());
writer2.WriteLine(data);
writer2.Flush();
}
}
}
}
客户端A代码如下:
//客户端A代码
static void Main(string[] args)
{
TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse("127.0.0.1"), 8088);
Console.WriteLine("Connected to server.");
StreamWriter writer = new StreamWriter(client.GetStream());
Thread receiveThread = new Thread(() =>
{
StreamReader reader = new StreamReader(client.GetStream());
while (true)
{
string data = reader.ReadLine();
Console.WriteLine("Received from server: {0}", data);
}
});
receiveThread.Start();
while (true)
{
string data = Console.ReadLine();
writer.WriteLine(data);
writer.Flush();
}
}
客户端B代码与客户端A基本相同。如果要在这个示例中添加更多的客户端,则只需要将new StreamReader(client.GetStream())和new
StreamWriter(cl.GetStream())中的client和cl分别替换为各自对应的客户端就可以了。
示例二
在这个示例中,我们使用Winform创建一个聊天客户端,实现多用户在线聊天。
客户端代码如下:
public partial class Form1 : Form
{
private TcpClient client;
private StreamReader reader;
private StreamWriter writer;
private Thread receiveThread;
public Form1()
{
InitializeComponent();
}
private void connectBtn_Click(object sender, EventArgs e)
{
client = new TcpClient();
client.Connect(IPAddress.Parse(ipText.Text), int.Parse(portText.Text));
connectBtn.Enabled = false;
sendBtn.Enabled = true;
statusLabel.Text = "Connected to server.";
reader = new StreamReader(client.GetStream());
writer = new StreamWriter(client.GetStream());
receiveThread = new Thread(() =>
{
while (true)
{
string data = reader.ReadLine();
Invoke(new Action(() =>
{
chatListBox.Items.Add(data);
}));
}
});
receiveThread.Start();
}
private void sendBtn_Click(object sender, EventArgs e)
{
string data = textBox.Text;
writer.WriteLine(data);
writer.Flush();
chatListBox.Items.Add(data);
textBox.Text = "";
}
}
这个示例使用了Winform创建聊天客户端,在connectBtn_Click中建立到服务端的TCP连接,在sendBtn_Click中向服务端发送数据。在receiveThread线程中,
使用Invoke更新UI界面。
总结
以上就是“C#聊天程序服务端与客户端完整实例代码”的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#聊天程序服务端与客户端完整实例代码 - Python技术站