winform TCP/IP客户端代码
时间: 2023-11-15 20:05:58 浏览: 46
以下是一个简单的 WinForms TCP/IP 客户端的代码示例:
```csharp
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
namespace TCPClientExample
{
public partial class MainForm : Form
{
private TcpClient client;
private NetworkStream stream;
private byte[] buffer;
public MainForm()
{
InitializeComponent();
}
private void connectButton_Click(object sender, EventArgs e)
{
try
{
// 创建 TCP 客户端对象并连接到指定的 IP 地址和端口号
client = new TcpClient();
client.Connect(IPAddress.Parse(ipTextBox.Text), int.Parse(portTextBox.Text));
// 获取网络流
stream = client.GetStream();
buffer = new byte[client.ReceiveBufferSize];
// 连接成功后禁用连接按钮
connectButton.Enabled = false;
// 开始异步读取数据
stream.BeginRead(buffer, 0, buffer.Length, ReadCallback, null);
}
catch (Exception ex)
{
MessageBox.Show("连接失败:" + ex.Message);
}
}
private void sendButton_Click(object sender, EventArgs e)
{
try
{
// 将消息转换为字节数组
byte[] data = Encoding.UTF8.GetBytes(messageTextBox.Text);
// 发送消息到服务器
stream.Write(data, 0, data.Length);
}
catch (Exception ex)
{
MessageBox.Show("发送失败:" + ex.Message);
}
}
private void ReadCallback(IAsyncResult ar)
{
try
{
// 结束异步读取操作并获取接收到的字节数
int bytesRead = stream.EndRead(ar);
if (bytesRead > 0)
{
// 将接收到的字节数组转换为字符串
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
// 在消息框中显示接收到的消息
Invoke(new Action(() =>
{
messagesTextBox.AppendText(message + Environment.NewLine);
}));
// 继续异步读取数据
stream.BeginRead(buffer, 0, buffer.Length, ReadCallback, null);
}
}
catch (Exception ex)
{
MessageBox.Show("读取失败:" + ex.Message);
}
}
}
}
```
这个示例中,我们创建了一个 `MainForm` 类来实现我们的客户端界面。界面上有一个文本框用于输入服务器的 IP 地址,一个文本框用于输入服务器的端口号,一个文本框用于输入要发送的消息,一个按钮用于连接到服务器,一个按钮用于发送消息,以及一个文本框用于显示接收到的消息。
在 `connectButton_Click` 事件处理程序中,我们创建了一个 `TcpClient` 对象,并使用 `Connect` 方法连接到指定的 IP 地址和端口号。然后,我们获取网络流,并设置一个接收缓冲区来存储接收到的数据。最后,我们使用 `BeginRead` 方法开始异步读取数据。
在 `sendButton_Click` 事件处理程序中,我们将要发送的消息转换为字节数组,并使用网络流的 `Write` 方法将其发送到服务器。
在 `ReadCallback` 方法中,我们结束异步读取操作,并获取接收到的字节数。如果接收到的字节数大于零,我们将接收到的字节数组转换为字符串,并在消息框中显示出来。然后,我们使用 `BeginRead` 方法继续异步读取数据。
请注意,这只是一个简单的示例,没有处理错误、关闭连接等方面的逻辑。在实际应用中,您可能需要添加更多的错误处理和逻辑来实现更完整的客户端功能。