黑马程序员_网络编程之套接字

本文详细介绍了如何使用C#实现Socket通信,包括服务器端和客户端的配置步骤。讲解了Socket的基本概念及其在网络通信中的作用,并提供了具体的代码示例。

------- ASP.Net+Unity开发.Net培训、期待与您交流! -------

     Socket的英文原意是插座、孔的意思,在网络通信编程中通常称为套接字。所有的Internet应用程序大体上

可以分为两种:客户端应用程序(请求信息)和服务器端应用程序(响应来自客户端的信息请求)。当客户端和服务器端要进行通信时,客户端和服务器端都要维护一个Socket,用来进行通信(发送和接收数据)。

       一般服务器端会运行多个应用程序(进程)来提供服务,所以就有必要为每个应用程序分配一个唯一的标识,

使得需要特定服务的客户端找到这个应用程序并获得服务。解决的方法是服务端所在主机用它的IP地址来唯一标

识,主机上的每个服务分配一个协议端口来唯一标识,即IP地址+协议端口唯一确定了某台主机上的某个服务程序

。客户端的标识同样也是这种方法。在C#中,服务端Socket描述了服务端应用程序的IP地址+端口,客户端Socket

描述了客户端应用程序的IP地址+端口。以这个为基础,客户端和服务器端就建立了唯一确定的通信连接,进行数

据的发送和接收。
首先配置服务器端套接字,服务器端Socket一般最少需要两个,一个用来监听客户端请求,但不负责通信。一个

用来进行通信。
1、首先实例化一个新的Socket对象,用来监听请求(监听套接字),Socket原型为:
public Socket (AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType);
addressFamily表示网络通信使用的地址族的类型,InterNetwork表示需要一个IP4的地址,InterNetworkV6表示

IP6的地址。这里我们使用IP4的地址
socketType表示套接字类型,根据通信性质的不同,可以把SocketType分成3类:
① Stream socket(流套接字):该类Socket提供双向、有序、无重复的数据流服务,它使用于处理大量网络数

据;
② Dgram Socket(数据报套接字):该类Socket支持双向的数据流,但不保证数据传输的可靠性、有序性和无重

复性,也就是说一个从Dgram Socket接收信息的进程,有可能发现信息重复或和发出时顺序不同的情况;
③ Raw Socket(原始套接字):该类 Socket可以访问底层的协议。
我们通常使用的是数据流套接字 Stream。
protocolType表示网络通信遵循的协议类型,这里我们使用TCP协议。
Socket socketServer=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
2、实例化一个新Socket后,为了唯一标识这个Socket表示的服务,要将这个Socket绑定到这台主机的某个协议端

口。C#中的IP地址+协议端口用IPEndPoint对象封装,原型为public IPEndPoint(IPAddress address,int port)
 address表示IP地址,port表示提供服务的协议端口号。比如我们要将服务程序绑定到本机(IP地址为:

192.168.0.192)的65535端口(端口号为0~65535),IPEndPoint serverIdentify=new(IPAddress.Parse

(192.168.0.192),int.Parse(65535));
Bind方法将套接字绑定到特定端口:socketServer.Bind(serverIdentify);
3、开始监听并设置最大监听队列:socketServer.Listen(10);
4、socketServer套接字监听请求,当有请求进来后,要新建一个通信套接字来和请求进行通信(通信套接字):

Socket socketAccept=socketServer.Accept();
5、通信套接字的Receive方法接收客户端发来的数据的字节流:
byte[] byteRecevie=new byte[1024*1024*2]//初始化一个2MB大小的字节数组,用来存放字节数据
int length=socketAccept.Receive(byteReceive);//将发送的数据保存到字节数组并返回实际发送来的数据的字

节长度
然后配置客户端套接字,客户端Socket要连接的IPEndPoint一定要和服务端的IPEndPoint相同,这样才能建立正

确的服务端/客户端连接。
1、首先配置客户端Socket同服务端:
Socket socketClient=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
2、配置和服务端相同的IPEndPoint并用Connect方法连接服务端
IPEndPoint clientIdentify=new(IPAddress.Parse(192.168.0.192),int.Parse(65535));
socketClient.Connect(clientIdentify);
3、用客户端套接字向服务端发送字节流
byte[] byteSend= Encoding.UTF8.GetBytes("这是发送到服务器端的数据!");
socketClient.Send(byteSend);
这样,服务端的byteReceive字节数据就会接收到字节数据!
同样,服务端Socket也有Send方法,可以向客户端发送数据,客户端Socket也有Receive方法,可以接收服务端发

送的数据,使得服务端和客户端可以相互接受和发送数据进行网络通信!

                                                          ------- ASP.Net+Unity开发.Net培训、期待与您交流! -------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值