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

 更新时间:2020年6月25日 11:24  点击:2485

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)

[!--infotagslink--]

相关文章

  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • 浅谈C# 字段和属性

    这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • C#绘制曲线图的方法

    这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • c#中(&&,||)与(&,|)的区别详解

    这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#中list用法实例

    这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25