C# Socket编程浅谈

 C# Socket编程浅谈

                                            作者:源远流长 

     什么是socket?我认为其实socket就是一个API接口,我们主要是利用它来发送和接收网络上的数据。有了它,我们就不必直接去操作网卡了,可以直接通过这个接口来收发数据,这样也就省去了很多复杂的底层操作。Socket编程一般都是采用C/S结构(即客户端/服务端)。所利用的协议也是大家最为熟悉的两种协议:TCP & UDP。当然,如果需要的话,也可以自己定义协议,但那样就较为麻烦了。

  用过VC socket编程的人都应该知道,socket编程是一个很麻烦也很严谨的编程。它用到的函数非常多,仅经常用的就有WSAStartup函数、WSACleanup函数、socket函数、closesocket函数、send函数、recv函数、bind函数、listen函数、accept函数、connect函数等十个函数。而在C#中则不需要了那么复杂了。在C#中,MS为我们提供了 System.Net.Sockets 命名空间(using System.Net.Sockets;),里面包含了Socket类。通过调用socket类就可以直接访问网络了。此外,MS还为我们提供了:TcpClient类、TcpListener类、UDPClient类等几个助手类。这几个类简化了许多操作,从而使socket变的更简单了。但对于初学者我并不建议使用,而且它使socket的灵活性也大为降低。下面来具体的实现步骤:

a. 建立一个套接字

  b. 绑定本机的IP和端口

  c. 如果使用的是TCP协议,因为是面向连接的,所以要利用ListenO()方法来监听;如果使用的是UDP协议,因为是无连接的,所以来者不拒,不需要侦听。

d. TCP情况下,如果监听到一个连接,就可以使用accept函数来接收这个连接,然后就可以利用Send/Receive来执行操作了。而在UDP情况下,则不需要accept函数, 直接使用SendTo/ReceiveFrom来执行操作就可以了。(注意:由于UDP不需要建立连接,所以在发送前并不知道对方的IP和端口,因此需要指定一个发送的节点才能进行正常的发送和接收)

   e. 当终止发送和接收了时,要利用close函数来释放内存资源。  

 

    此外,至于何时使用TCP和何时使用UDP,我个人倾向使用TCP来实现通信,因为它是面向连接的、可靠性比较高、不会发生数据包丢失的情况;当然在一些需要即时响应的软件中,UDP则更胜一筹,它响应速度快、延迟低,占用资源更少。因此选择TCP还是UDP则是根据应用环境和软件需要等综合因素来决定的。为了帮助大家对上述文字进一步的理解,下面给出两个利用socket来实现通信的简单小实例,一个是基于TCP协议的,另一个是基于UDP协议的,注释都很清楚,相信大家一看就会明白。

 

1.基于TCP的简单示例代码:(部分代码内容来源于网络)

TCPServer  //服务器端

   

TCPClient   //客户端

 

2.基于UDP协议的简单示例代码:

UDPServer  //服务端

 

UDPClient    //客户端

   

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值