SOCKET

Socket相关概念

• socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。)

• socket非常类似于电话插座。以一个电话网为例。电话的通话双方相当于相互通信的2个程序,电话号码就是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。
• 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序)。
• 例如:http 使用80端口 ftp使用21端口 smtp 25端口
• 有两种类型:

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

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

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

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

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

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

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

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

• 客户端的Socket

  • 客户端Socket

     ○ 必须指定要连接的服务端地址和端口。
     ○ 通过创建一个Socket对象来初始化一个到服务器端的TCP连接。 
    

Socket的通讯过程

• 服务器端:
  • 申请一个socket
  • 绑定到一个IP地址和一个端口上
  • 开启侦听,等待接授连接

• 客户端:

  • 申请一个socket
  • 连接服务器(指明IP地址和端口号)

• 服务器端接到连接请求后,产生一个新的socket(端口大于1024 小于65535)与客户端建立连接并进行通讯,原监听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);

Socket方法

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

Socket通信基本流程图

在这里插入图片描述

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值