使用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();//关闭客户端
      }
    }

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();//关闭连接
      }
    }

(0)

相关推荐

  • C#中TCP粘包问题的解决方法

    一.TCP粘包产生的原理 1.TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成. 2.发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据.若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据.接收方引起的粘包是由于接收方用户进程不及时接收数据,从

  • C# Socket粘包处理讲解示例

    当socket接收到数据后,会根据buffer的大小一点一点的接收数据,比如: 对方发来了1M的数据量过来,但是,本地的buffer只有1024字节,那就代表socket需要重复很多次才能真正收完这逻辑上的一整个消息.对方发来了5条2个字符的消息,本地的buffer(大小1024字节)会将这5条消息全部收入囊下...那么,如何处理呢?下面我以最简单的一种文本消息来demo 根据上面所描述的情况,最重要的关键落在了下面3个因素的处理上 消息的结尾标记接收消息时判断结尾标记当本次buffer中没有结

  • C#基于TCP协议的服务器端和客户端通信编程的基础教程

    运行在TCP之上常见的网络应用协议有比如HTTP.FTP.SMTP.POP3.IMAP. TCP是TCP/IP体系中最重要的传输协议,它提供全双工和可靠交付的服务,是大多数应用协议工作的基础. TCP是一种面向连接(连接导向)的,可靠的,基于字节流的传输层通信协议. TCP的工作过程 建立连接 传输数据 连接的终止 TCP的主要特点 1.TCP是面向连接的协议 2.是端到端的通信.每个TCP连接只能有两个端点,而且只能一对一通信,不能点对多的 的直接通信 3.高可靠性 4.全双工方式传输 5.数

  • 在C#中对TCP客户端的状态封装详解

    TCP客户端连接TCP服务器端有几种应用状态:1.与服务器的连接已建立2.与服务器的连接已断开3.与服务器的连接发生异常 应用程序可按需求合理处理这些逻辑,比如:1.连接断开后自动重连2.连接断开后选择备用地址重连3.所有状态变化上报告警本文描述的TcpClient实现了状态变化的事件通知机制. 复制代码 代码如下: /// <summary>   /// 异步TCP客户端   /// </summary>   public class AsyncTcpClient : IDisp

  • C#实现TCP连接信息统计的方法

    本文实例讲述了C#实现TCP连接信息统计的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Netw

  • 使用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")

  • 详解Android 基于TCP和UDP协议的Socket通信

    本来想讲一下基础的网络通信方面的知识点,发现太枯燥乏味了,不过笔试中也经常会问到这方面的问题,所以关于通信方面的知识点,小编会放到面试中去,因为实战中也就面试会用到这方面知识点 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据. 而Socket通信中基于TCP/IP协议的通信则是在双方建立起连接后就可以直接进行数

  • C语言编写基于TCP和UDP协议的Socket通信程序示例

    Tcp多线程服务器和客户端程序 服务器程序: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #define PORT 8082 #define BUFSIZE 512 cha

  • 基于C#的UDP协议的同步通信实现代码

    一.摘要 总结基于C#的UDP协议的同步通信.  二.实验平台 Visual Studio 2010  三.实验原理 UDP传输协议同TCP传输协议的区别可查阅相关文档,此处不再赘述. 四.实例 4.1 采用socket实现UDP 由于UDP是一种无连接的协议.因此,为了使服务器应用能够发送和接收UDP数据包,则需要做两件事情: (1) 创建一个Socket对象: (2) 将创建的套接字对象与本地IPEndPoint进行绑定. 完成上述步骤后,那么创建的套接字就能够在IPEndPoint上接收流

  • Android基于TCP和URL协议的网络编程示例【附demo源码下载】

    本文实例讲述了Android基于TCP和URL协议的网络编程.分享给大家供大家参考,具体如下: 手机本身是作为手机终端使用的,因此它的计算能力,存储能力都是有限的.它的主要优势是携带方便,可以随时打开,而且手机通常总是处于联网状态.因此网络支持对于手机应用非常重要. Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建立基于UD

  • 使用python编写udp协议的ping程序方法

    服务器端 import random from socket import * serverSocket = socket(AF_INET, SOCK_DGRAM)#建立udp协议的socket连接 serverSocket.bind(('', 12000)) while True: rand = random.randint(0, 10)#生成随机数,模拟udp环境下的丢包 message, address = serverSocket.recvfrom(1024)#接收客户端发送的信息,应该

  • tcp、udp、ip协议分析_动力节点Java学院整理

    互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能.为了改善这种缺点,大牛弄出了TCP/IP协议.现在几乎所有的操作系统都实现了TCP/IP协议栈. TCP/IP协议栈主要分为四层:应用层.传输层.网络层.数据链路层,每层都有相应的协议,如下图 所谓的协议就是双方进行数据传输的一种格式.整个网络中使用的协议有很多,所幸的是每一种协议都有RFC文档.在这里只对IP.TCP.UDP协议头做一个分析. 首先来看看在网络

  • 详情解析TCP与UDP传输协议

    目录 一.什么是 socket ? 二.Socket 编程的重要概念 ① IP 地址 ② TCP/IP 端口 ③ 协议 三.socket 编程的 API 接口 ① Linux 下的 socket API 接口 ② windows 下的 socket API 接口 ③ TCP.UDP 通信的 socket 编程流程图 四.socket 的应用实例 ① 基于 TCP 的本地客户端.服务端信息交互实例 ② 基于 UDP 的本地客户端.服务端信息交互实例 一.什么是 socket ? Socket 的英

  • Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例

    本文实例讲述了Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能.分享给大家供大家参考,具体如下: 由于目前工作的需要,需要在IPv4和IPv6两种网络模式下TCP和UDP的连接,要做到客户端发包,服务端收包. 前几天写了代码,但是把UDP的客户端和服务端使用TCP模式的代码了.今天在公司使用该工具的时候,发现了问题,忘记了UDP不需要验证.疏忽,疏忽.不过刚刚接触编程,可以原谅. 现在在家,已经把代码改好了.经测试可以使用. 先运行客户端: python Mini

  • Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例

    本文实例讲述了Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能.分享给大家供大家参考,具体如下: [吐槽] 网上的代码害死人,看着都写的言之凿凿,可运行就是有问题. 有些爱好代码.喜欢收藏代码的朋友,看到别人的代码就粘贴复制过来.可是起码你也试试运行看啊大哥 [正文] 昨日修改运行了UDP协议的C/S聊天程序,可是TCP协议的怎么都不行.各种试,各种坑. 做了下面几个修改后,终于可以了: 1.对发送.接收的信息,分别进行编码和解码 2.客户端的第10行bind改为c

随机推荐