源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-05-16 20:15 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#基于TCP协议的服务器端和客户端通信编程的基础教程
运行在TCP之上常见的网络应用协议有比如HTTP、FTP、SMTP、POP3、IMAP。 TCP是TCP/IP体系中最重要的传输协议,它提供全双工和可靠交付的服务,是大多数应用协议工作的基础。 TCP是一种面向连接(连接导向)的,可靠的,基于字节流的传输层通信协议。 [b]TCP的工作过程 [/b] [list] [*]建立连接[/*] [*]传输数据[/*] [*]连接的终止[/*] [/list] [b]TCP的主要特点 [/b]1.TCP是面向连接的协议 2.是端到端的通信。每个TCP连接只能有两个端点,而且只能一对一通信,不能点对多的 的直接通信 3.高可靠性 4.全双工方式传输 5.数据以字节流的方式传输 6.传输的数据无消息边界 [b]关于线程 [/b]利用TCP开发应用程序时,.net框架提供两种工作方式,一种是同步工作方式,另一种是异步工作方式。 同步工作方式是指利用TCP编写的程序执行到监听或者接收语句,在未完成当前工作前不再。 继续往下执行,线程处于阻塞状态,直到该语句完成后才能继续执行下一条语句。 异步工作方式是指程序执行到监听或者接收语句时,无论当前工作是否完成,都会继续往下执行。 [b]TcpListener与TcpClient类常用方法与属性[/b] TCPListener类用于监听客户端连接请求,TCPClient类用于提供本地主机和远程主机的连接信息。 两个类都位于 System.Net.Socckets命名空间下。 1.TCPListener类常用的方法: (1)AcceptSocket:从端口处接收一个连接并赋予它Socket对象 (2)AcceptTcpClient:从端口处接收一个连接并赋予它TCPClient对象 (3)Equals:判断两个TcpListener对象是否相等 (4)GetType:获取当前实例的类型 (5)Pending :确定是否有挂起的连接请求 (6)Start:开始接听传入的连接请求 (7)Stop:关闭监听器 (8)ToString:创建TcpListener对象的字符串表示 2.TcpClient常用的属性与方法 属性: (1)Client:获取或设置基础套接字 (2)LingerState:获取或设置套接字保持连接的时间 (3)NoDelay:获取或设置一个值,该值在发送或接收缓存冲未满时禁止延迟、 (4)ReceiveBufferSize:获取或设置TCP接收缓存区的大小 (5)ReceiveTimetut:获取或设置套接字接收数据的超时时间 (6)SendBufferSize:获取或设置TCP发送缓存区的大小 (7)SendTimeout:获取或设置套接字发送数据超时时间 方法: (1)Close:释放TcpClient实例,而不关闭基础连接 (2)Connect:用指定的主机名和端口号将客户端连接到TCP主机 (3)BeginConnect:开始一个远程主机连接的异步请求 (4)GetStream:获取能够发送和接收数据的NetworkStream对象 [b]TCP编程的一般步骤 [/b]1.网络通信的最基本的前提就是客户端要先和服务器建立TCP连接 2.服务端要不断的监听客户端是否有连接请求、并且服务端能要识别特定的客户端 3.连接并创建对应的套接字 4.发送数据和接收数据 [b]编写服务器端程序的一般步骤 [/b]1.创建一个TcpListener对象,然后调用该对象的Start方法在指定的端口进行监听 2.在单独的线程中,首先循环调用AcceptTcpClient方法接收客户端的连接请求 ,从该方法中的返回结果中得到与该客户端对应的TcpClient对象,并利用该对象 的GetStream方法得到NetworkStream。然后再利用该对象得到其他使用更方便的 对象,比如BinaryReader对象、BinaryWrite对象,为进一步与对方通信做准备。 3.每得到一个新的TcpClient对象,就创建一个与客户对应的线程,在线程与对应的 客户进行通信。 4.根据传送信息的情况确定是否关闭与客户连接。
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.Threading; 
using System.Net.Sockets; 
using System.Net; 
using System.IO; 
 
namespace TCP 
{ 
  public partial class TcpListenerTest : Form 
  { 
    public TcpListenerTest() 
    { 
      InitializeComponent(); 
    } 
    //声明 
    private IPAddress localAddress;// IP地址 IPAddress类 在命名空间 using System.Net下 
    private const int port = 58080;//端口 
    private TcpListener tcpListener;//监听套接字 TcpLestener与TcpClient类 在命名空间 using System.Net.Sockets下 
    private TcpClient tcpClient;//服务端与客户端建立连接 
    private NetworkStream newworkStream;//利用NetworkStream对象与远程主机发送数据或接收数据\ 
    private BinaryReader binaryReader;//读取 BinaryReader与BinaryWriter类在命名空间using System.IO下 
    private BinaryWriter binaryWrite;//写入 
    private void Form1_Load(object sender, EventArgs e) 
    { 
      IPAddress[] listenerIp = Dns.GetHostAddresses("www.baidu.com");//返回主机指定的IP地址 
      localAddress = listenerIp[0]; //初始化IP地址为本地地址 
      tcpListener = new TcpListener(localAddress,port);//创建TcpListener对象 
      tcpListener.Start();//开始监听 
 
      Thread thread = new Thread(AcceptClientConnect);//启动一个线程接收请求 
      thread.Start();//启动线程 
    } 
    //发起请求 
    private void AcceptClientConnect() 
    {  
      while(true) 
      { 
        try 
        { 
          tcpClient = tcpListener.AcceptTcpClient();//从端口接收一个连接,并赋予它TcpClient对象 
          if (tcpClient != null) 
          { 
            newworkStream = tcpClient.GetStream(); 
            binaryReader = new BinaryReader(newworkStream); 
            binaryWrite = new BinaryWriter(newworkStream); 
          } 
 
        } 
        catch 
        { 
          break; 
        } 
      } 
    } 
  } 
} 

[b]TCP编程 客户端程序一般步骤 [/b]1.利用TcpClient的构造函数创建一个TcpClient对象 2.使用Connect方法与服务器建立连接 3.利用TcpClient对象的GetStream对象得到网络流,然后利用该网络流与服务器进行数据传输 4.创建一个线程监听指定的端口,循环接收并处理服务器发送过来的信息。 5.完成工作之后,想服务器发送关闭信息,并关闭与服务器的连接。
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.Sockets; 
using System.Net; 
using System.IO; 
 
namespace TCP 
{ 
  public partial class TcpClientTest : Form 
  { 
    public TcpClientTest() 
    { 
      InitializeComponent(); 
    } 
    private TcpClient tcpClient;//声明 
    private IPAddress iAdress;//IP地址 
    private const int port=58080; //端口  
    private NetworkStream networkStream;//网络流 
    private BinaryReader binayRead;//读取 
    private BinaryWriter binayWrite;//写入 
    private void TcpClient_Load(object sender, EventArgs e) 
    { 
      IPAddress[] ipAddress = Dns.GetHostAddresses("www.baidu.com");//返回主机指定的IP地址 
      iAdress = ipAddress[0]; //初始化IP地址为本地地址 
      IPEndPoint ipoint = new IPEndPoint(iAdress,port);//将网络端点表示为IP和端口号 
      tcpClient = new TcpClient(ipoint);//实例化TcpClient类 
      //最方便 TcpClient tcpClient=new TcpClient("www.baidu.com",port); 
 
      if (tcpClient != null) 
      { 
        networkStream = tcpClient.GetStream();//得到网络流 
        binayRead = new BinaryReader(networkStream); 
        binayWrite = new BinaryWriter(networkStream); 
      } 
    } 
 
    private void ReMessage() 
    { 
      while (true) 
      { 
        try 
        { 
          string rcMsg = binayRead.ReadString();//从网络流中读取数据 
          if (rcMsg != null) 
          { 
            MessageBox.Show(rcMsg); 
          } 
          else 
          { 
            break; 
          } 
        } 
        catch 
        { 
  
        } 
      } 
    } 
  } 
} 

  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部