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

运行在TCP之上常见的网络应用协议有比如HTTP、FTP、SMTP、POP3、IMAP。
TCP是TCP/IP体系中最重要的传输协议,它提供全双工和可靠交付的服务,是大多数应用协议工作的基础。
TCP是一种面向连接(连接导向)的,可靠的,基于字节流的传输层通信协议。

TCP的工作过程

  • 建立连接
  • 传输数据
  • 连接的终止

TCP的主要特点
1.TCP是面向连接的协议
2.是端到端的通信。每个TCP连接只能有两个端点,而且只能一对一通信,不能点对多的
的直接通信
3.高可靠性
4.全双工方式传输
5.数据以字节流的方式传输
6.传输的数据无消息边界

关于线程
利用TCP开发应用程序时,.net框架提供两种工作方式,一种是同步工作方式,另一种是异步工作方式。
同步工作方式是指利用TCP编写的程序执行到监听或者接收语句,在未完成当前工作前不再。
继续往下执行,线程处于阻塞状态,直到该语句完成后才能继续执行下一条语句。
异步工作方式是指程序执行到监听或者接收语句时,无论当前工作是否完成,都会继续往下执行。

TcpListener与TcpClient类常用方法与属性

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对象

TCP编程的一般步骤
1.网络通信的最基本的前提就是客户端要先和服务器建立TCP连接
2.服务端要不断的监听客户端是否有连接请求、并且服务端能要识别特定的客户端
3.连接并创建对应的套接字
4.发送数据和接收数据

编写服务器端程序的一般步骤
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;
        }
      }
    }
  }
}

TCP编程 客户端程序一般步骤
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)

相关推荐

  • 使用C语言编写基于TCP协议的Socket通讯程序实例分享

    tcp客户端示例 #include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <stdio.h> #include <unistd.h>

  • TCP协议详解_动力节点Java学院整理

    本文描述了TCP协议,首先简单介绍了TCP完成了一些什么功能:介绍了TCP报文格式,以及典型报文的数据格式:接着从链路控制和数据传输两个方面进行了介绍,在TCP中链路控制和数据传输是通过同一个通道进行的,并没有区分控制通道和数据通道:在网络中传输数据(控制或真实数据),网络可能发生拥堵,因此接下来简单描述了主机端进行拥塞控制所采取的方法,也简单提及了中间路由器/交换机进行拥塞避免所采取的主动措施:最后介绍了在TCP中性能分析的一些基本概念点,在开发网络应用程序的时候,需要对应用的网络需求进行一个

  • Java基于Tcp协议的socket编程实例

    本文实例讲述了Java基于Tcp协议的socket编程方法,分享给大家供大家参考.具体分析如下: 以下是一对一的通信编程实现,后续会继续学习一个服务器监听多个客户端的实现. 这里用到的主要步骤如下: 第一步:以特定端口(如4800)新建socket对象 第二步:以系统输入设备构造BufferedReader对象,该对象用于接收系统键盘输入的字符 第三步:以socket对象 得到输出流来构造PrintWriter 第四步:以socket对象得到输入流来构造相应的BufferedReader对象,该

  • 使用TCP/IP协议栈指纹进行远程操作系统辨识

    概述 本文讨论了如何查询一台主机的TCP/IP协议栈来收集宝贵的信息.首先,我列举了栈指纹之外的几种"经典的"操作系统辨识方法.然后我描述了栈指纹工具的"工艺现状".接下来说明让远程主机泄漏其信息的一些技术.最后详述了我的实现(nmap),和用它获得的一些流行网站的操作系统信息.理由热点网络 我认为辨识一个系统所运行OS的用处是相当显而易见的,所以这一节会很短.最有力的例子之一是许多安全漏洞是OS相关的.试想你正在作突破试验并发现53端口是打开的.如果那是易遭攻击的

  • 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

  • .Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用

    中午没事,把去年刚毕业那会画的几张图翻出来了,大概介绍Winform应用程序运行的过程,以及TCP协议在Winform中的应用.如果有Windows消息机制等基础,很好理解这两张图. (1)Winform应用程序运行结构图 (2)TCP通讯协议在Winform程序中的应用示意图 熟悉整个程序的来龙去脉,编程的时候就会很轻松,不会云里雾里. 另附公司招聘面试题一份,用了几次,发现效果不好,不知啥原因 1.简述接口.抽象类的区别. 2.简述重载(overload)与重写(override)的区别.

  • 使用批处理重置TCP_IP协议

    在XP系统的ghost xp网络组件列表里,有一个Internet 协议,Internet 协议又称为TCP或IP,该"卸载"按钮显示是灰色--不可选状态,如果在特殊情况下我们需要重新安装TCP/IP协议可以通过下面的批处理来完成 复制代码 代码如下: @echo off echo. echo 即将重置 TCP/IP 协议.重置可能会导致网络程序工作异常. echo 只有在 TCP/IP 被破坏导致不能上网时才建议尝试本重置操作. echo. echo 任意键开始重置 TCP/IP,C

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

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

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

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

  • Java编程实现基于TCP协议的Socket聊天室示例

    本文实例讲述了Java编程实现基于TCP协议的Socket聊天室.分享给大家供大家参考,具体如下: 这里使用Socket套接字进行编程,完成的是基于TCP可靠服务实现服务器与客户端的双通信. Server服务器端: package com.han; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.Win

  • java基于TCP协议实现聊天程序

    JAVA程序设计之基于TCP协议的socket聊天程序 ,供大家参考,具体内容如下 一.程序实现的功能 1.进入客户端界面 2.创建昵称 3.群发信息 4.@私聊 5.下线通知 6.在线人数统计 二.整体架构图 三.简单介绍 本程序实现了基于TCP通信的聊天程序: 1 服务器端: 服务器端继承JFrame框架,添加组件.创建服务器端的socket,起一个线程池,每接收到一个客户端的连接,分配给其一个线程处理与客户端的通信,将每个客户端的昵称和服务器分配给其的输出流存储到哈希表中.通过检索哈希表中

  • java实现基于TCP协议网络socket编程(C/S通信)

    一.前言:TCP原理简介 首先,保证文章完整性,TCP的理论原理还是需要简介一下,略显枯燥๑乛◡乛๑. TCP(传输控制协议,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议.TCP旨在适应支持多网络应用的分层协议层次结构.也就是说,TCP是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议. 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务. 以上TCP的特点,也正是与UD

  • Java网络编程之基于TCP协议

    一.单向通信 功能:客户端发送一句话到服务器: 客户端: public class TestClient {//客户端 //这是一个main方法,是程序的入口: public static void main(String[] args) throws IOException { //1.创建套接字:指定服务器的ip和端口号: Socket s = new Socket("192.168.199.217",8888); //2.对于程序员来说,向外发送数据 感受 -->利用输出流

  • Java基于TCP协议的Socket通信

    目录 简介 TCP简介 JAVA Socket简介 SocketImpl介绍 TCP 编程 构造ServerSocket 1.1 绑定端口 1.2 设定客户连接请求队列的长度 1.3 设定绑定的IP 地址 1.4 默认构造方法的作用 多线程示例 简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户

  • JAVA实现基于Tcp协议的简单Socket通信实例

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西.  1.首先先来看下基于TCP协议Socket服务端和客户端的通信模型: Socket通信步骤:(简单分为4步) 1.建立服务端ServerSocket和客户端Socket 2.打开连接到Socket的输出输入流 3.按照协议进行读写操作 4.关闭相对应的资源 2.相关联的API: 1.首先先来看下

  • python 基于TCP协议的套接字编程详解

    基于TCP协议的套接字编程 实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件 # 服务端 import socket # 1. 符合TCP协议的手机 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # TCP # 2. 绑定手机号 一个服务器,我们自己的电脑作为服务器的话,用自己的IP地址 server.bind(('127.0.0.1',8000)) # 127.0.0.1 代表本地 # server.bind(

随机推荐