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. iOS开发之-- 从当前隐藏导航界面push到下一个显示导航界面出现闪一下的问题

    在修改项目代码的过程中,遇到一个问题,就是比如主页面的导航栏是隐藏的,但是需要push到别的页面,这个时候,会出现导航栏闪一下的情况, 下面是我写的一种方案,也就是在loadView这个生命周期函数中 ...

  2. 第十四篇:Apriori 关联分析算法原理分析与代码实现

    前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文 ...

  3. 在Hyper-V Linux VM如何选择LIS Linux集成服务

    导读 很多工程师都知道,如果你选择在 Hyper-V 中运行 Linux guest VM,要获得最好的使用体验,必需针对你所使用的 Linux 发行版和使用场景选择 Linux Integratio ...

  4. jenkins multijob 插件使用

    如果你想要停止对下游/上游工作链定义的混乱 当您想要添加具有层次结构的任务时,按顺序执行或并行执行 安装multijob插件可以让jenkins任务按照分组.顺序执行 jenkins版本:2.80 1 ...

  5. 将工程导入到SVN仓库

    1.在桌面右键点开Tortoise客户端 2.选择仓库 3.在仓库的trunk目录下为新工程创建文件夹

  6. PAT 甲级 1068 Find More Coins(0,1背包)

    1068. Find More Coins (30) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Eva l ...

  7. Code Forces 22B Bargaining Table

    B. Bargaining Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. java项目规范

    一.命名规范 1. 项目名全部小写 2. 包名全部小写 3. 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写. 如:public class MyFirstClass{} 4. 变量 ...

  9. 适配器模式(Adpater)

    一.适配器模式介绍 适配器模式:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作. 例如: NBA中的球员来自不同国家,而世界标准语言 ...

  10. 解决Cell重绘导致 重复的问题

    IOS在Cell上的优化令人觉得底层框架的成熟,可是有些情形却会造成不必要的麻烦, 当使用了 UITableViewCell *cell = [tableView dequeueReusableCel ...