Winform Socket通信

原文地址:http://www.cnblogs.com/DrHao/p/4953532.html

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

时间: 2024-11-08 11:35:03

Winform Socket通信的相关文章

【转】Winform Socket通信

Socket相关概念[端口] 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序). 例如:http 使用80端口  ftp使用21端口 smtp 25端口 有两种类型:50000 ?  流式Socket(STREAM): 是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低: ?  数据报式Socket(DATAGRAM): 是一种无连接的So

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

本文主要讲述: 1.正常通信中握手建立 2.一对多的通信 3.发送接收数据格式转换 4.资源释放 5.开启并保持服务监听 1.握手建立正常的通信通道 项目需要通信的双方(假设是一个上位机.一个下位机)之间需要建立一个稳定的通道,以便进行通信.本项目中具体操作是:上位机作为服务器,下位机作为客户端,同时制定通信协议.上位机首先打开监听等待建立通道,下位机主动连接上位机后发送连接成功的信息到上位机,上位机根据通信协议发送数据到下位机,此时通道已经建立.但为了保险起见(同时遵循三次握手),客户端再次发

C#通信之Socket通信的简单例子

socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过”套接字”向网络发出请求或者应答网络请求. 这里构建一个简单的例子,客户端发消息,服务端接收,然后回执一条消息.大致能够了解如何使用Socket进行通信. 服务端监听,接收信息: 客户端连接,并发送信息: 使用Socket通信,程序一般会在幕后运行,然后再合适的时间提示信息.这很自然的就会涉及到多线程的问题.在这个例子中因为每个连接都要创建一 个线程,所以需要对线程进行管理.这里我使用了两个类:Conn

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

上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次使用,同时对在使用socket时出现些许问题的同仁们多一个粗浅建议.不足之处请提出,谢谢. 本文主要讲述: 1.正常通信中握手建立 2.一对多的通信 3.发送接收数据格式转换 4.资源释放 5.开启并保持服务监听 1.握手建立正常的通信通道 项目需要通信的双方(假设是一个上位机.一个下位机)之间需要

TCP及socket通信原理

一.网络互联模型 因特网在刚面世时,只有同一制造商生产的计算机才能彼此通信,制定网络互联模型的目的就是为异种的计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考. 互联参考模型: OSI七层模型(Open System Interconnect):应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 DoD四层模型:是OSI七层模型的浓缩版,包括 进程/应用层.主机到主机层.因特网层.网络接入层 以上两种模型是层次型的,分层模型的优点主要在于: ①将网络

java socket通信-传输文件图片--传输图片

ClientTcpSend.java   客户端发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.InetSocketAddress; import java.net.Socket; public class ClientTcpSend { public static String clien

c# socket通信较完善方案

c#的socket通信应用.文件较多.附件为工程.  core AbstractBytesWorker.cs    字节工作器(基类),用于用于同一不同功能的字节工作器 BinaryHand.cs  2进制处理器.  ThDispose.cs 处理回收相关 crc  entity ThPersonInfo.cs manager ThSocketManager.cs  ThSocketManagerBusiness.cs 所有的业务 request RequestCode.cs  请求码 ThPr

深入浅出讲解:php的socket通信

深入浅出讲解:php的socket通信 对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.         什么是TCP/IP.UDP?2.         Socket在哪里呢?3.         Socket是什么呢?4.         你会使用它们吗? 什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协

Android简单Socket通信demo

一.Android Socket 通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信