C#的TCPClient连接

本文介绍如何使用C#实现TCP客户端连接并接收数据,同时提供了几种获取本机IP地址的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System.Net;

using System.Net.Sockets;   

          TcpClient tcpClient = new TcpClient();
            tcpClient.Connect("192.168.0.80", 23);
            try
            {
                byte[] Data = new Byte[1024];
                NetworkStream nsData = tcpClient.GetStream();
                Int32 bytes=nsData.Read(Data, 0, Data.Length);
                string receiveData = Encoding.ASCII.GetString(Data, 0, bytes);
                tcpClient.Close();
                this.textBox1.Text = receiveData;
            }
            catch
            {
                MessageBox.Show(e.ToString());
            }

获取本机IP的方法:

System.Net.IPAddress addr = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);

            string s =null;
            IPAddress[] addressList =new Dns.GetHostByName(Dns.GetHostName()).AddressList;
            for (int i = 0; i < addressList.Length; i++)
            {
                s += addressList[i].ToString();
                MessageBox.Show(s);
            }

            //MSDN推荐采用Dns.GetHostEntry方法
            string addressIP = null;
            string hostName = Dns.GetHostName();    //获取主机名
            IPAddress[] addressIPList = Dns.GetHostEntry(hostName).AddressList;
            for (int i = 0; i < addressIPList.Length; i++)
            {
                addressIP = addressIPList[i].ToString();
                MessageBox.Show(addressIP);
            }

C# 中,可以通过多种方式判断 `TcpClient` 是否已经建立连接。最直接的方法是使用 `TcpClient` 提供的 `Connected` 属性,该属性返回一个布尔值,指示当前 `TcpClient` 是否与远程主机建立了连接。然而,需要注意的是,`Connected` 属性仅表示最后一次 I/O 操作时的连接状态,并不能保证当前连接仍然有效,因为网络状态可能在任何时候发生变化[^1]。 ### 使用 `Connected` 属性检查连接状态 ```csharp TcpClient tcpClient = new TcpClient(); tcpClient.Connect("192.168.0.80", 23); if (tcpClient.Connected) { Console.WriteLine("当前已连接到服务器。"); } else { Console.WriteLine("当前未连接到服务器。"); } ``` ### 更可靠的方法:发送测试数据或接收数据 为了更准确地判断连接是否仍然有效,可以尝试发送或接收数据。如果发送或接收操作成功,则说明连接有效;如果抛出异常,则说明连接可能已经断开。例如,可以通过发送一个小数据包并等待响应来测试连接状态: ```csharp TcpClient tcpClient = new TcpClient(); tcpClient.Connect("192.168.0.80", 23); try { NetworkStream stream = tcpClient.GetStream(); byte[] buffer = new byte[1]; int bytesRead = stream.Read(buffer, 0, 1); if (bytesRead == 0) { Console.WriteLine("连接已关闭。"); } else { Console.WriteLine("连接有效。"); } } catch (IOException) { Console.WriteLine("连接中断或不可用。"); } ``` ### 使用异步方法检查连接状态 对于需要非阻塞操作的场景,可以使用异步方法尝试连接并设置超时时间,以判断是否能够成功建立连接: ```csharp TcpClient client = new TcpClient(); var result = client.BeginConnect("127.0.0.1", 80, null, null); bool success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1)); client.Close(); Console.WriteLine(success ? "连接成功" : "连接失败"); ``` 上述方法可以帮助开发者在不同的应用场景中判断 `TcpClient` 是否处于连接状态,并根据具体需求选择最合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值