浅析C#基于TCP协议的SCOKET通信
TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程。然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸的是在。net framework环境下,我们不必要去追究TCP协议底层的实现,一样可以很方便的编写出基于TCP协议进行网络通讯的程序。
C#基于TCP协议的网络通讯
要进行C#基于TCP协议的网络通讯,首先必须建立同远程主机的连接,连接地址通常包括两部分——主机名和端口,如www.yesky.com:80中, www.yesky.com就是主机名,80指主机的80端口,当然,主机名也可以用IP地址代替。当连接建立之后,就可以使用这个连接去发送和接收数据包,TCP协议的作用就是保证这些数据包能到达终点并且能按照正确的顺序组装起来。
在。net framework的类库(Class Library)中,提供了两个用于TCP网络通讯的类,分别是TcpClient和TcpListener.由其英文意义显而易见,TcpClient 类是基于TCP协议的客户端类,而TcpListener是服务器端,监听(Listen)客户端传来的连接请求。TcpClient类通过TCP协议与服务器进行通讯并获取信息,它的内部封装了一个Socket类的实例,这个Socket对象被用来使用TCP协议向服务器请求和获取数据。因为与远程主机的交互是以数据流的形式出现的,所以传输的数据可以使用。net framework中流处理技术读写。在我们下边的例子中,你可以看到使用NetworkStream类操作数据流的方法。
在下面的例子中,我们将建立一个时间服务器,包括服务器端程序和客户端程序。服务器端监听客户端的连接请求,建立连接以后向客户端发送当前的系统时间。
先运行服务器端程序,下面截图显示了服务器端程序运行的状况:
然后运行客户端程序,客户端首先发送连接请求到服务器端,服务器端回应后发送当前时间到客户端,这是客户端程序的截图:
发送完成后,服务器端继续等待下一次连接:
通过这个例子我们可以了解TcpClient类的基本用法,要使用这个类,必须使用System.Net.Socket命名空间,本例用到的三个命名空间如下:
- using System;
- using System.Net.Sockets;
- using System.Text;
- //从字节数组中获取字符串时使用该命名空间中的类
- //首先讨论一下客户端程序,开始我们必须初始化一个TcpClient类的实例:
- TcpClient client = new TcpClient(hostName, portNum);
- //然后使用TcpClient类的GetStream()方法获取数据流, 并且用它初始化一个NetworkStream类的实例:
- NetworkStream ns = client.GetStream();
注意,当使用主机名和端口号初始化TcpClient类的实例时,直到跟服务器建立了连接,这个实例才算真正建立,程序才能往下执行。如果因为网络不通,服务器不存在,服务器端口未开放等等原因而不能连接,程序将抛出异常并且中断执行。
建立数据流之后,我们可以使用NetworkStream类的Read()方法从流中读取数据,使用Write()方法向流中写入数据。读取数据时,首先应该建立一个缓冲区,具体的说,就是建立一个byte型的数组用来存放从流中读取的数据。Read()方法的原型描述如下:
- public override int Read(in byte[] buffer,int offset,int size)
buffer是缓冲数组,offset是数据(字节流)在缓冲数组中存放的开始位置,size是读取的字节数目,返回值是读取的字节数。在本例中,简单地使用该方法来读取服务器反馈的信息:
- byte[] bytes = new byte[1024];//建立缓冲区
- int bytesRead = ns.Read(bytes, 0, bytes.Length);//读取字节流
- // 然后显示到屏幕上:
- Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead));
- //最后不要忘记关闭连接:
- client.Close();
以上介绍C#基于TCP协议的网络通讯。
浅析C#基于TCP协议的SCOKET通信相关推荐
- java socket发送定长报文_一个基于TCP协议的Socket通信实例
原标题:一个基于TCP协议的Socket通信实例 1. 前言 一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度.正好前段时间完成了一个so ...
- 基于TCP协议的Socket通信,实现文件断点续传
代码示例: 实现文件断点续传 先编写一个服务端和客户端都会用到的流解析类: StreamTool.java: public class StreamTool {public static void s ...
- linux socket通信tcp,基于TCP协议的socket通信
一.服务器端 1.创建serverSocket,即服务器端的socket,绑定指定的端口,并侦听此端口 ServerSocket server = new ServerSocket(8888); 2. ...
- 基于TCP协议的socket通信
一.服务器端 1.创建serverSocket,即服务器端的socket,绑定指定的端口,并侦听此端口 ServerSocket server = new ServerSocket(8888); 2. ...
- 基于TCP协议的Socket网络通信
前言 一. 什么是网络(了解七层网络模型)? 二. 什么是TCP/UDP协议? 三.什么是socket? 定义 四.基于TCP协议的socket通信的实现步骤是怎样的? 客户端的实现 服务端的实现 测 ...
- python中基于tcp协议的通信(数据传输)
tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据 ...
- java socket 通信协议_java 基于TCP协议的Socket编程和通信
java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...
- 异常处理、socke基于TCP协议编程
一.异常处理 1.错误和异常 1.程序中难免出现错误,而错误分成两种 (1)语法错误(这种错误过不了Python解释器的语法检测,必须在程序执行前改正) #语法错误示范一 if#语法错误示范二 def ...
- 基于TCP协议的网络程序(基础学习)
下图是基于TCP协议的客户端/服务器程序的一般流程: 图 37.2. TCP协议通讯流程 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听 ...
最新文章
- java程序设计_Java程序设计:学习笔记(4-5)(未完工)
- linux:关于Linux系统中 CPU Memory IO Network的性能监测
- 一个MySQL存储过程的模板
- Pots POJ - 3414(bfs)
- VISTA系统下装AUTOCAD 2006
- mysql connector c++与 visual studio 2012 联合使用
- LayaAir 文本 Text API 详解
- 项目管理概论网课作业(用于复习)
- 豪华酒店介绍预订网站模板,里面总共7个页面,适合酒店预订相关网站模板下载。
- 【读论文0623】The Devil Is in Classification: A Simple Framework for Long-Tail Instance Segmentation
- 诛仙3服务器查询系统,《诛仙3》4月1日服务器数据互通公告
- 没想到曾经排名第一的安全软件,如今变成无法卸载的流氓~
- Renovate - preview
- Hadoop-HDFS详解与HA,完全分布式集群搭建(细到令人发指的教程)
- 【CTO讲堂】支付接入开发的陷阱有多深? 京东支付
- 从被遗忘到牛市龙头,一文梳理ETH 2020爆发逻辑
- Unity 网络摄像设备 - WebCamDevice
- Java教程-黑马程序员版
- 基于matlab的循环卷积,用MATLAB实现循环卷积.doc
- 双电阻差分电流采样_合金取样电阻的作用特点及应用