.Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接

简介:               一,.NET中如何实现建立连接                         在网络中,我们可以通过IP地址唯一定位一台主机,而在主机中,我们要确定收到的数据包发给谁,可以通过端口号,端口号的作用简单说就是不至于使你要发给QQ好友的消息数据包被错误发到了你的OC程序上。



           

  一,.NET中如何实现建立连接



                        在网络中,我们可以通过IP地址唯一定位一台主机,而在主机中,我们要确定收到的数据包发给谁,可以通过端口号,端口号的作用简单说就是不至于使你要发给QQ好友的消息数据包被错误发到了你的OC程序上。


              通常,我们把发起连接的那一端称为客户端,这是主动的一方;而静默等待连接到来的那一端作为服务端。这个概念是比较相对的。


              在.Net中,我们可以使用TcpClient来建立连接,使用TcpListener来监听连接,从而在客户端和服务端建立连接。



二,服务端建立监听


                   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace 服务端对端口进行侦听
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("服务端正在运行呀。。。");
            //IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
           // IPAddress ip = IPAddress.Parse("127.0.0.1");
            IPAddress ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0]; //同上
            TcpListener listener = new TcpListener(ip, 8500);  //选择侦听端口

            listener.Start();//开始侦听

            Console.WriteLine("开始侦听啦。。。");
            Console.WriteLine("\n\n输入\"Q\"键退出。。");
            ConsoleKey key;
            do
            {
                key = Console.ReadKey(true).Key;

            } while (key!=ConsoleKey.Q);
        }
    }
}


   启动程序后,使用netstat -a查看端口情况:





     


   发现端口正在listening....




三,客户端与服务端建立连接



         在服务端侦听端口打开的情况下,就可以与服务端端口进行连接啦:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace 服务端与客户端的连接
{
    class Program
    {
        static void Main(string[] args)
        {

            #region 客户端与服务端连接

                //Console.WriteLine("客户端启动啦啦啦。。");
                //TcpClient client = new TcpClient();

                //try
                //{
                //    //与服务器进行连接
                //    client.Connect(IPAddress.Parse("127.0.0.1"), 8500);

                //}
                //catch (Exception ex)
                //{
                //    Console.WriteLine(ex.Message);
                //    return;
                //}

                ////打印连接到服务端的信息
                //Console.WriteLine("服务端连接成功啦。。本地IP端口为:{0}------>服务IP端口为:{1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);//client.Client获得到套接字

            #endregion

            #region 多个客户端与服务端的连接

                Console.WriteLine("客户端启动啦啦啦啦。。。。");
                TcpClient client;

                for (int i = 0; i < 2; i++)
                {
                    try
                    {
                        client = new TcpClient();//每创建一个新的TcpClient便相当于创建了一个新的套接字Socket与服务端通信,.Net会自动为这个套接字分配 一个端口号。
                        //与服务器建立连接
                        client.Connect(IPAddress.Parse("127.0.0.1"), 8500);

                    }
                    catch (Exception ex)
                    {

                        Console.WriteLine(ex.Message);
                        Console.WriteLine(ex.StackTrace);
                        return;
                    }
                    Console.WriteLine("服务端连接成功啦。。本地IP端口为:{0}------>服务IP端口为:{1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);//client.Client获得到套接字
                }

            #endregion


        }
    }
}



   连接时,主要是使用TcpClient对象,传入要连接的服务端的IP和端口号,就像发邮件那样,只要选择好存在的发件人,就能发送那样。




       


           

                    

目录
相关文章
|
5天前
|
机器学习/深度学习 存储 计算机视觉
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现-4
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现
|
5天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
11 0
|
5天前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
26 1
|
5天前
|
运维 安全 网络架构
【专栏】NAT技术是连接私有网络与互联网的关键,缓解IPv4地址短缺,增强安全性和管理性
【4月更文挑战第28天】NAT技术是连接私有网络与互联网的关键,缓解IPv4地址短缺,增强安全性和管理性。本文阐述了五大NAT类型:全锥形NAT(安全低,利于P2P)、限制锥形NAT(增加安全性)、端口限制锥形NAT(更安全,可能影响协议)、对称NAT(高安全,可能导致兼容性问题)和动态NAT(公网IP有限时适用)。选择NAT类型需考虑安全性、通信模式、IP地址数量和设备兼容性,以确保网络高效、安全运行。
|
5天前
|
网络协议 Linux iOS开发
|
5天前
|
安全 网络协议 物联网
城域以太网:连接城市的高速网络
【4月更文挑战第22天】
22 0
|
5天前
|
数据可视化 网络协议
|
5天前
|
Go 开发者
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第24天】Go语言的`net/http`包在HTTP客户端编程中扮演重要角色,但使用时需注意几个常见问题:1) 检查HTTP状态码以确保请求成功;2) 记得关闭响应体以防止资源泄漏;3) 设置超时限制,避免长时间等待;4) 根据需求处理重定向。理解这些细节能提升HTTP客户端编程的效率和质量。
19 1
|
5天前
|
设计模式 数据中心 网络架构
|
5天前
|
机器学习/深度学习 存储 算法
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现(下)
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现