ShiJoa
Articles23
Tags15
Categories3
Socket编程

Socket编程

Socket,套接字,C/S模式中最基本的元素之一

Socket 套接字

Socket是网络的基本构建。它是可以被命名和寻址的通信端点,每一个被使用中的Socket都有它自己的类型以及一个与它相连的进程。Socket存在通信区域,Socket只能和同一区域内的Socket交换数据(跨区域时需要转换进程)。
在基于TCP/IP协议的网络里,两个进程的相互作用模式是客户机/服务器模式,即,Client/Server(简称C/S)。这种模式的建立基于以下两点:

  • 非对等作用
  • 异步通信

下面说明基于TCP和UDP的socket技术

基于TCP的SOCKET技术

流式套接字(SOCK_STREAM):
提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。
程序设计思路如下:

服务端:

  1. 创建套接字 socket()
  2. 将套接字绑定到本地地址和一个端口上 bind()
  3. 将套接字设为监听模式,准备接受客户端的请求 listen()
  4. 等待客户端请求到来;在请求到达以后,接受连接请求,返回一个新的对应词连接的套接字 accept()
  5. 用返回的套接字和客户端通信 send/recv()
  6. 返回,等待另一客户的请求
  7. 关闭套接字

客户端:

  1. 创建套接字 socket()
  2. 向服务端发送连接请求 connect()
  3. 和服务器端进行通信 send/recv()
  4. 关闭套接字
    客户端不用绑定端口,因为当服务器接收到请求是已经记录下客户端的端口号。

基于UDP的SOCKET技术

数据报式套接字(SOCK_DGRAM):
提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。
程序设计思路如下:
服务端:

  1. 创建套接字 socket()
  2. 将套接字绑定到本地地址和一个端口上 bind()
  3. 在套接字上读/写数据,直到完成交换 send/recv()
  4. 关闭套接字 closesocket()

客户端:

  1. 创建套接字 socket()
  2. 将套接字绑定到远程主机地址 bind()
  3. 在套接字上写/读数据,直到数据交换完成 send/recv()
  4. 关闭套接字 closesocket()

有此基本认识,可以去学习mini木马看看实际编程中Socket的用法啦

Author:ShiJoa
Link:https://shijoa.github.io/2020/12/09/Socket%E7%BC%96%E7%A8%8B/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可