博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#网络编程-TcpClient、TcpListener、UdpClient
阅读量:4956 次
发布时间:2019-06-12

本文共 3106 字,大约阅读时间需要 10 分钟。

        说到网络编程,就少不了要说说Socket。无论是在Linux系统中还是Windows系统中,都支持Socket编程。所谓的Socket就是一个套接字,由一个IP地址和一个端口确定。网络编程中一般支持面向连接和面向无连接两种,面向连接使用TCP协议,无连接使用UDP协议。下面两幅图描述面向连接和面向无连接的Socket通信过程。

图一:面向连接

图二:面向无连接

     从图一中可以看出,要使用Socket实现通信需要的基本步骤。首先要实例化一个Socket对象,然后进行绑定。由于面向连接,服务器端需要一直监听是否有客户端尝试连接进来。客户端同样需要实例化Socket对象,尝试连接服务器,当服务器接受某客户端的连接请求时,连接建立,此时客户端和服务器断可以进行Send和Recieve数据。.netframework允许以这样的方式来使用Socket,同时提供TcpClient、TcpListener、UdpClient三个类来简化编程过程。下面给出这三个类的使用方法。

//TCPClient的第一种使用方法            //声明一个TCPClient对象,并自动绑定到本地地址和一个端口上            TcpClient test1 = new TcpClient();            //TCPClient对象试图连接到远程主机上的8080端口上            test1.Connect("www.baidu.com", 8080);            //TCPClient的第二种使用方法            //直接创建TCPClient对象,连接到远程主机上(本地自动分配随机端口)            TcpClient test2 = new TcpClient("www.baidu.com",8080);            //TCPClient的第三种使用方法            //自己指定本地地址和端口值(可以尝试制定非本地地址,以伪装自己发送数据包)            IPAddress ipa = Dns.GetHostByName(Dns.GetHostName()).AddressList[0];            IPEndPoint ipe = new IPEndPoint(ipa,9090);            //创建TCPClient对象,将其绑定到指定的本地地址和端口上            TcpClient test3 = new TcpClient(ipe);            //尝试连接到远程主机上            test3.Connect("www.baidu.com", 8080);            //TCPClient对象创建完,可以使用GetStream方法创建Stream类,进行收发数据            NetworkStream ns = test3.GetStream();            //写入数据            byte[] outStream = Encoding.ASCII.GetBytes("Testing");            ns.Write(outStream,0,outStream.Length);            //读取数据            byte[] inStream = new byte[1024];            ns.Read(inStream,0,inStream.Length);

TcpListener  listener= new TcpListener(9050);            //启动侦听            listener.Start();            //AcceptClient方法返回值是TcpClient类型            TcpClient client = listener.AcceptTcpClient();            //得到TCPClient对象后,可以像上一个例子中一样,使用GetStream方法,读写数据            NetworkStream ns = client.GetStream();            //写入数据            byte[] outStream = Encoding.ASCII.GetBytes("Testing");            ns.Write(outStream,0,outStream.Length);            //读取数据            byte[] inStream = new byte[1024];            ns.Read(inStream, 0, inStream.Length);            //各种关闭            ns.Close();            client.Close();            listener.Stop();

//创建UDPClient对象            UdpClient client = new UdpClient(8000);            //接受发送主机的IP地址信息            IPEndPoint remoteclient = new IPEndPoint(IPAddress.Any,0);            //Receive方法包含一个IPEndPoint,携带远程发送主机的IP地址信息            byte[] recv = client.Receive(ref remoteclient);            string data = Encoding.ASCII.GetString(recv);            Console.WriteLine("Data comes from : {0}",remoteclient.ToString());            Console.WriteLine("Data : {0}", data);            client.Close();            //UDPClient对象创建,发送数据            UdpClient client1 = new UdpClient(8001);            IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.1.11"),8001);            byte[] sendMsg = Encoding.ASCII.GetBytes("Sending Messages");            client1.Send(sendMsg, sendMsg.Length, ipe);            client1.Close();
这样使用,可以方便编程,但对理解Socket实现过程没有好处。

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/gxwang/archive/2012/05/17/4940882.html

你可能感兴趣的文章
fortran90简明教程
查看>>
flex知识点归纳
查看>>
hdu 5442 Favorite Donut 最大表示法+KMP
查看>>
ubuntu下如何查看用户登录及系统授权相关信息
查看>>
丶制作一个数字猜猜看小游戏
查看>>
秋季学期学习总结
查看>>
SpringBoot 优化内嵌的Tomcat
查看>>
Dagger2 入门解析
查看>>
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
Alpha版(内部测试版)发布
查看>>
Python2和Python3的不同
查看>>
递归实验的三个作业实验(阶乘,杨辉三角,汉诺塔,回文)
查看>>
highcharts曲线图
查看>>
编写移植性好的C代码
查看>>
JS去除数组重复元素
查看>>
[八省联考2018]林克卡特树lct
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>
宏定义
查看>>
Nginx05---负载均衡 upsteam
查看>>