使用C#实现基于TCP和UDP协议的网络通信程序的基本示例

 更新时间:2016年04月09日 11:11:05   作者:hzy3774  
这篇文章主要介绍了使用C#实现基于TCP和UDP协议的网络通信程序的示例,文中分别编写了基本的服务器端和客户端,代码十分简单,需要的朋友可以参考下

C#中使用TCP通信

TCP通信需要通信双方都在线,所以需要先启动服务端进行监听,客户端才能获得连接,服务端代码:

static void Main(string[] args) 
    { 
      TcpClient client = null; 
      NetworkStream stream = null; 
      byte[] buffer = null; 
      string receiveString = null; 
 
      IPAddress localIP = IPAddress.Parse("127.0.0.1"); 
      int localPort = 11000; 
      TcpListener listener = new TcpListener(localIP, localPort);//用本地IP和端口实例化Listener 
      listener.Start();//开始监听 
      while (true) 
      { 
        client = listener.AcceptTcpClient();//接受一个Client 
        buffer = new byte[client.ReceiveBufferSize]; 
        stream = client.GetStream();//获取网络流 
        stream.Read(buffer, 0, buffer.Length);//读取网络流中的数据 
        stream.Close();//关闭流 
        client.Close();//关闭Client 
 
        receiveString = Encoding.Default.GetString(buffer).Trim('\0');//转换成字符串 
        Console.WriteLine(receiveString); 
      } 
    } 

只有服务端开启监听后,客户端才能正确连接,所以服务端要一直开启监听,客户端每次发送数据,都要首先与服务端建立连接,连接建立完成后才进行数据发送。客户端代码:

static void Main(string[] args) 
    { 
      string sendString = null;//要发送的字符串 
      byte[] sendData = null;//要发送的字节数组 
      TcpClient client = null;//TcpClient实例 
      NetworkStream stream = null;//网络流 
 
      IPAddress remoteIP = IPAddress.Parse("127.0.0.1");//远程主机IP 
      int remotePort = 11000;//远程主机端口 
 
      while (true)//死循环 
      { 
        sendString = Console.ReadLine();//获取要发送的字符串 
        sendData = Encoding.Default.GetBytes(sendString);//获取要发送的字节数组 
        client = new TcpClient();//实例化TcpClient 
        try 
        { 
          client.Connect(remoteIP, remotePort);//连接远程主机 
        } 
        catch (System.Exception ex) 
        { 
          Console.WriteLine("连接超时,服务器没有响应!");//连接失败 
          Console.ReadKey(); 
          return; 
        } 
        stream = client.GetStream();//获取网络流 
        stream.Write(sendData, 0, sendData.Length);//将数据写入网络流 
        stream.Close();//关闭网络流 
        client.Close();//关闭客户端 
      } 
    } 

201649111019897.jpg (456×186)

C#中使用UDP通信
UDP通信是无连接通信,客户端在发送数据前无需与服务器端建立连接,即使服务器端不在线也可以发送,但是不能保证服务器端可以收到数据。
服务器端代码:

static void Main(string[] args) 
    { 
      UdpClient client = null; 
      string receiveString = null; 
      byte[] receiveData = null; 
      //实例化一个远程端点,IP和端口可以随意指定,等调用client.Receive(ref remotePoint)时会将该端点改成真正发送端端点 
      IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0); 
 
      while (true) 
      { 
        client = new UdpClient(11000); 
        receiveData = client.Receive(ref remotePoint);//接收数据 
        receiveString = Encoding.Default.GetString(receiveData); 
        Console.WriteLine(receiveString); 
        client.Close();//关闭连接 
      } 
    } 

客户端代码:

static void Main(string[] args) 
    { 
      string sendString = null;//要发送的字符串 
      byte[] sendData = null;//要发送的字节数组 
      UdpClient client = null; 
 
      IPAddress remoteIP = IPAddress.Parse("127.0.0.1"); 
      int remotePort = 11000; 
      IPEndPoint remotePoint = new IPEndPoint(remoteIP, remotePort);//实例化一个远程端点 
 
      while (true) 
      { 
        sendString = Console.ReadLine(); 
        sendData = Encoding.Default.GetBytes(sendString); 
 
        client = new UdpClient(); 
        client.Send(sendData, sendData.Length, remotePoint);//将数据发送到远程端点 
        client.Close();//关闭连接 
      } 
    } 

201649111055659.jpg (363×174)

相关文章

  • DevExpress GridView自动滚动效果

    DevExpress GridView自动滚动效果

    这篇文章主要为大家详细介绍了DevExpress GridView自动滚动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • c#高效比对大量图片的实例代码

    c#高效比对大量图片的实例代码

    以前传统的比较方式是遍历图片中的每一个像素,然后进行比对。这样的比对在少量图片的比对上虽然效率低一点,但是也没有什么不好。但是在大量图片比对的时候,过长的反应时间和对服务器比较高的消耗肯定是不行的,下面介绍下新的方法
    2013-10-10
  • C#中如何获取当前目录和上级目录

    C#中如何获取当前目录和上级目录

    这篇文章主要介绍了C#中如何获取当前目录和上级目录问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • C#实现ESC退出窗口的三种方法

    C#实现ESC退出窗口的三种方法

    文章介绍了在VS2019环境下,通过同步按钮法、监听按键法和隐藏按钮法三种方式实现ESC键关闭窗体的功能,同步按钮法是设置Cancel属性,监听按键法涉及KeyPress或KeyDown事件,隐藏按钮法则将退出按钮尺寸设为0以隐藏,需要的朋友可以参考下
    2025-08-08
  • C#中数组Array,ArrayList,泛型List详细对比

    C#中数组Array,ArrayList,泛型List详细对比

    关于数组Array,ArrayList,泛型List,简单的说数组就是值对象,它存储数据元素类型的值的一系列位置.Arraylist和list可以提供添加,删除,等操作的数据. 具体如何进行选择使用呢,我们来详细探讨下
    2016-06-06
  • C#使用HttpClient进行http操作方式

    C#使用HttpClient进行http操作方式

    这篇文章主要介绍了C#使用HttpClient进行http操作方式,具有很好的参考价值,希望对大家有所帮助,
    2023-11-11
  • C#遍历子目录的方法

    C#遍历子目录的方法

    这篇文章主要介绍了C#遍历子目录的方法,涉及C#针对目录操作的相关技巧,需要的朋友可以参考下
    2015-04-04
  • C#使用dynamic一行代码实现反射操作

    C#使用dynamic一行代码实现反射操作

    dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译时默认dynamic对象支持你想要的任何特性,这篇文章主要介绍了C#用dynamic一行代码实现反射操作,需要的朋友可以参考下
    2023-04-04
  • 教你创建一个带诊断工具的.NET镜像

    教你创建一个带诊断工具的.NET镜像

    本文编写的初衷是因为在群里有很多小伙伴遇到生产环境性能问题的时候,.NET的runtime镜像中没有带一些工具,安装和使用起来很麻烦,所以分享一些我们公司内部一些技巧,对.NET镜像带诊断工具相关知识感兴趣的朋友一起看看吧
    2022-07-07
  • C#中异步是4种实现方式详解

    C#中异步是4种实现方式详解

    这篇文章主要为大家详细介绍了C#中异步实现方式的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
    2024-03-03

最新评论