Socket相关概念[端口]

在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序)。

例如:http 使用80端口  ftp使用21端口 smtp 25端口

有两种类型:50000

•    流式Socket(STREAM):
    是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低;

•    数据报式Socket(DATAGRAM):
    是一种无连接的Socket,对应于无连接的UDP服务应用.不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高.

端口用来标识计算机里的某个程序。

按端口号可分为3大类

   (1) 公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。

   (2) 注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。

     (3) 动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。

Socket一般应用模式(服务器端和客户端)

1.服务端welcoming socket 开始监听端口(负责监听客户端连接信息)
2.客户端client socket连接服务端指定端口(负责接收和发送服务端消息)
3.服务端welcoming socket 监听到客户端连接,创建connection socket。(负责和客户端通信)

  服务器端的Socket(至少需要两个)

    一个负责接收客户端连接请求(但不负责与客户端通信)

    每成功接收到一个客户端的连接便在服务端产生一个对应的负责通信的Socket

    在接收到客户端连接时创建.

    为每个连接成功的客户端请求在服务端都创建一个对应的Socket(负责和客户端通信).

  客户端的Socket

    必须指定要连接的服务端地址和端口。

    通过创建一个Socket对象来初始化一个到服务器端的TCP连接。

Socket的通讯过程
   服务器端:
   申请一个socket
   绑定到一个IP地址和一个端口上
   开启侦听,等待接授连接
   客户端:
   申请一个socket
   连接服务器(指明IP地址和端口号)
   服务器端接到连接请求后,产生一个新的socket(端口大于1024)与客户端建立连接并进行通讯,原监听socket继续监听。

Socket的构造函数

  连接通过构造函数完成。

  public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)

    AddressFamily 成员指定 Socket 用来解析地址的寻址方案。例如,InterNetwork 指示当 Socket 使用一个 IP 版本 4 地址连接。

    SocketType 定义要打开的 Socket 的类型

    Socket 类使用 ProtocolType 枚举向 Windows Sockets API 通知所请求的协议

      如:mySocket = new Socket(AddressFamily.InterNetwork,     
                                       SocketType.Stream, ProtocolType.Tcp);

  AddressFamily.InterNetWork:使用 IP4地址。

  SocketType.Stream:支持可靠、双向、基于连接的字节流,而不重复数据。此类型的 Socket 与单个对方主机进行通信,并且在通信开始之前需要远程主机连接。Stream 使用传输控制协议 (Tcp) ProtocolType 和 InterNetworkAddressFamily。

  ProtocolType.Tcp:使用传输控制协议。

注意点:

l  至少要定义一个要连接的远程主机的IP和端口号。

l  端口号必须在 1 和 65535之间,最好在1024以后。

l  要连接的远程主机必须正在监听指定端口,也就是说你无法随意连接远程主机。

•  如:

•  IPAddress addr = IPAddress.Parse("127.0.0.1");

•  IPEndPoint endp = new IPEndPoint(addr, 10001);

服务端先绑定:serverWelcomeSocket.Bind(endp)

客户端再连接:clientSocket.Connect(endp)

l  一个Socket一次只能连接一台主机。

l  Socket关闭后无法再次使用。

l  每个Socket对象只能一台远程主机连接. 如果你想连接到多台远程主机, 你必须创建多个Socket对象。

Socket方法:
  ------------------相关类--------------------------
   IPAddress类:包含了一个IP地址
   IPEndPoint类:包含了一对IP地址和端口号
  --------------------方法们------------------------------
  Socket (): 创建一个Socket
  Bind(): 绑定一个本地的IP和端口号(IPEndPoint)
  Listen(): 让Socket侦听传入的连接尝试,并指定侦听队列容量
  Connect(): 初始化与另一个Socket的连接
  Accept(): 接收连接并返回一个新的socket
  Send(): 输出数据到Socket
  Receive(): 从Socket中读取数据
  Close(): 关闭Socket (销毁连接)

Socket通信基本流程图

       

基于TCPSocket编程

TCP service:可靠的字节流传输

        

Socket源代码:

链接:http://pan.baidu.com/s/1i3EX7lN  密码:d148

转自:http://www.cnblogs.com/Dr-Hao/p/4953532.html

【转】Winform Socket通信的更多相关文章

  1. Winform Socket通信

    Socket相关概念[端口] 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应 ...

  2. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  3. .net平台下C#socket通信(中)

    上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...

  4. .net平台下C#socket通信(转)

    上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...

  5. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  6. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  7. Socket通信类

    package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  8. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  9. socket通信

    socket通信 一:socket基于Tcp连接,数据传输有保证 二:socket连接的建立过程: 1:服务器监听 2:客户端发出请求 3:建立连接 4:通信 三:一个简单的例子:服务器端每隔一段时间 ...

随机推荐

  1. VC++为你的程序增加内存泄露检测

    使用方法:  C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546 ...

  2. tinker

    Ios前一段时间因为热更新被强制下架也算是最大闻了,但Android没关系,继续玩 首先tinker比Andfix好多了,版本现在都到1.7.11了,Andfix不支持yunos, 现在项目中没有用到 ...

  3. 动态加载script文件

    动态加载script文件:   http://www.cnblogs.com/skykang/archive/2011/07/21/2112685.html

  4. 追踪溯源--抓住隐藏在NAT后面的罪犯

    零.绪论: 水一篇,很小,只是一点思路记录,在工作中经常遇到的一类小问题.NAT后面的地址如何追查下去,推动网络整改不现实,总还要有一些手段来确认. 一.背景: 全球IPv4地址越来越少,也越来越贵, ...

  5. Bootstrap中关于input里file的样式更改

    给input里file类型加button样式 1.在Bootstrap中input里的file类型样式很不美观,一个按钮加一段文字,还会随浏览器的不同呈现不同的样式,所以开发的时候可以将file的样式 ...

  6. 2017 Multi-University Training Contest - Team 5——HDU6095&&HDU6090&&HDU

    HDU6095——Rikka with Competition 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6095 题目意思:抱歉虽然是签到题,现场 ...

  7. Python爬虫实例(一)爬取百度贴吧帖子中的图片

    程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 http:// ...

  8. arcgis server/portal 日志格式化脚本

    友好化格式阅读 背景 通过arcgis for server manager中的logs选项卡可以查看当前站点的日志.其该页面提供了友好的日志显示方式. 但是在实际情况中,如arcgis server ...

  9. kafka-stream数据清洗

    1.数据清洗业务类LogProcessor package com.css.kafka.kafka_stream; import org.apache.kafka.streams.processor. ...

  10. 627. Swap Salary

    627. Swap Salary SQL Schema Given a table salary, such as the one below, that has m=male and f=femal ...