本文介绍Socket的基本知识。

TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手” ,详细见《计算机网络》。

SOCKET(套接字)是TCP/IP协议的网络通信的一种实现。包含进行网络通信必须的五种信息:

连接使用的协议(TCP/UDP)

本地主机的IP地址

本地进程的协议端口

远地主机的IP地址

远地进程的协议端口

通过SOCKET ,可以实现应用中的并发链接 建立SOCKET连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

Socket连接过程:

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

客户端请求:指客户端的套接字提出连接请求,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求

连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程进行连接,而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接又称流Socket。 当使用UDP协议进行连接时,该Socket连接就是一个UDP连接,又称数据报Socket。

Socket是什么? 

Socket可以看成在程序进行通讯连接中的位于客户端和服务端上的两个接口,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据,就像应用程序打开了一个文件句柄,将数据读写到稳定的存储器上一样。使用Socket可以将应用程序添加到网络中,并与处于同一网络中的其他应用程序进行通信。一台计算机上的应用程序向socket写入的信息能够被另一台计算机上的另一个应用程序读取,反之依然。根据不同的的底层协议实现,也会很多种不同的Socket。本博文当中只覆盖了TCP/IP协议族的内容,在这个协议族当中主要的Socket类型为流套接字(stream socket)和数据报套接字(datagram socket)。流套接字将TCP作为其端对端协议,提供了一个可信赖的字节流服务。数据报套接字使用UDP协议,提供可一个“尽力而为”的数据报服务,应用程序可以通过它发送最长65500字节的个人信息。

如图:

DotNet中关于Socket类: 

.NetFrameWork为Socket通讯提供了System.Net.Socket命名空间,在这个命名空间里面有以下几个常用的重要类分别是:

   ·Socket类 这个低层的类用于管理连接,WebRequest,TcpClient和UdpClient在内部使用这个类。

   ·NetworkStream类 这个类是从Stream派生出来的,它表示来自网络的数据流

   ·TcpClient类 允许创建和使用TCP连接

   ·TcpListener类 允许监听传入的TCP连接请求

   ·UdpClient类 用于UDP客户创建连接(UDP是另外一种TCP协议,但没有得到广泛的使用,主要用于本地网络)

c# 代码
  1. Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);

  其中,addressFamily 参数指定 Socket 使用的寻址方案,socketType 参数指定 Socket 的类型,protocolType 参数指定 Socket 使用的协议。

服务端:

1、创建Socket实例

c# 代码
  1. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

2、将此Socket实例绑定至服务器(本机)的某个端口

c# 代码
  1. IPAddress ip = IPAddress.Parse("172.16.1.15");
  2. IPEndPoint ipe = new IPEndPoint(ip, 2000);
  3. s.Bind(ipe);//绑定2000端口

3、开始监听,如果监听到则进行相应的处理

 客户端:

c# 代码
  1. while (true)
  2. {
  3. s.Listen(0);//开始监听
  4. Socket temp = s.Accept();//为新建连接创建新的Socket。
  5. string recvStr = "";
  6. byte[] recvBytes = new byte[1024];
  7. int bytes;
  8. bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
  9. recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
  10. Console.WriteLine("Server Get Message:{0}", recvStr);//把客户端传来的信息显示出来
  11. string sendStr = "From server: Ok!Client Send Message Sucessful!";
  12. byte[] bs = Encoding.ASCII.GetBytes(sendStr);
  13. temp.Send(bs, bs.Length, 0);//返回客户端成功信息
  14. temp.Close();
  15. }

1、创建Socket实例

c# 代码
  1. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

2、将此Socket连接到服务器

c# 代码
  1. IPAddress ip = IPAddress.Parse("172.16.1.15");
  2. IPEndPoint ipe = new IPEndPoint(ip, 2000);//把ip和端口转化为IPEndPoint实例
  3. c.Connect(ipe);//连接到服务器

3、向服务器发送信息

c# 代码
  1. string sendStr = "hello!This is a socket test";
  2. byte[] bs = Encoding.ASCII.GetBytes(sendStr);
  3. c.Send(bs, bs.Length, 0);//发送测试信息

4、接收服务器返回的信息

c# 代码
  1. string recvStr = "";
  2. byte[] recvBytes = new byte[1024];
  3. int bytes;
  4. bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
  5. recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
  6. Console.WriteLine("Client Get Message:{0}", recvStr);//显示服务器返回信息

5、关闭Socket

   

c# 代码

c.Close();

转载于:https://www.cnblogs.com/hanyonglu/archive/2011/04/19/2020615.html

Dotnet中Socket网络通信相关推荐

  1. 计算机网络:Socket网络通信底层数据传输

    1. 前言 最近在研究RDMA的实时流处理系统,其中需要比较RDMA高速网络通信和传统Socket网络通信的传输特点进行比较.所以我们就来总结游戏传统Scoket网络通信的特点,对于一个程序开发人员来 ...

  2. python怎么网络通信_深入Python中的网络通信

    TCP/IP 计算机与网络设备两情侣要谈恋爱,相互通信,那么双方就必须有规则.基于相同的方法,不同的硬件.操作系统之间的通信,都需要一种规则.而我们就把这种规则称为协议(protocol). TCP/ ...

  3. java中socket类_Java中的Socket的用法

    Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的网络通信时通过Socket实现的,Socket分为Server ...

  4. Python中socket解读

    操作系统底层原理 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在"裸机"上的最基本的系统软件,任何其他软件都必须 ...

  5. Python Socket 网络通信详解

    Python 模块 Socket 网络通信 文章目录 Python 模块 Socket 网络通信 1. socket介绍 2. Socket 类型 3. Socket 函数 3.1 服务器端 Sock ...

  6. Unity中进行网络通信:三:unity客户端和Unity服务端互相发消息

    目录 一.目的 1.想知道:Unity中进行网络通信:unity客户端和Unity服务端互相发消息 二.参考 1.unity3D中使用Socket进行数据通信(三) 三.操作:一:完成:在同一个Uni ...

  7. unity游戏开发-socket网络通信

    本篇主要是分享基于unity的客户端socket网络通信方案.关于服务器的c#-socekt搭建放在了这里<基于C#的Tcp服务端通信>.其中关于socekt粘包断包的处理放在这里分享了& ...

  8. Python学习,python中socket解读

    操作系统底层原理 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在"裸机"上的最基本的系统软件,任何其他软件都必须 ...

  9. C#中Socket的简单使用

    以前学过的Socket,后来没怎么用过,就基本忘了,所以闲来时重新回顾学习一番. 一.Socket的概念 Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和 ...

最新文章

  1. Flex Builder 开发语言切换问题
  2. Android心得4.1--文件的保存与读取及文件的操作模式详解.doc
  3. C#中的几个实用的代码
  4. 王垠:怎样尊重一个程序员?
  5. SSL *** vs IPSEC ***
  6. SAP License:Ecc6.0和R/3 有什么区别?
  7. 加工食品和饮料防腐剂行业调研报告 - 市场现状分析与发展前景预测
  8. 如何使用ELK来监控性能
  9. 简单python脚本实例-python常用运维脚本实例
  10. Mac使用NDK编译FFmpeg4.0.2单独so库(验证可用)
  11. matlab 滤波器_数字滤波器的MATLAB与FPGA实现
  12. python 录制键盘宏_宏命令如何录制_海盗船 K70RGB版红轴机械键盘_键鼠导购-中关村在线...
  13. php 在线拍卖系统源码,php拍卖系统,源码
  14. FANUC机器人基础学习_示教器详解(图文)
  15. python导入包的输入法_鼠须管输入法 傻瓜版配置 - 基于 rime_pro 增强包
  16. 二手房交易有哪些税费?
  17. 百度图神经网络7日打卡营--DAY01前半部分 总结
  18. 查岗:两个60后海归博士开发的手机监控应用
  19. Android 移动开发 近场通信 蓝牙通信
  20. 导航栏的返回文字修改

热门文章

  1. 某娱乐资源网同款网站源码
  2. 15 个第三方Web 表单资源
  3. Bootstrap 3: 使用注意box-sizing细节及解决方法
  4. Linux/Ubuntu: 使用 trash-cli 防止 rm 命令误删除重要文件
  5. Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南
  6. Python实例讲解 -- 磁盘文件的操作
  7. 轻量级的 JavaScript 弹出框脚本:TinyBox
  8. CUDA编程之快速入门-----GPU加速原理和编程实现
  9. C++——二进制输出一个数以及输出double型位数过多情况
  10. C++——获取array,vector,string的元素个数