Socket,套接字,C/S模式中最基本的元素之一
Socket 套接字
Socket是网络的基本构建。它是可以被命名和寻址的通信端点,每一个被使用中的Socket都有它自己的类型以及一个与它相连的进程。Socket存在通信区域,Socket只能和同一区域内的Socket交换数据(跨区域时需要转换进程)。
在基于TCP/IP协议的网络里,两个进程的相互作用模式是客户机/服务器模式,即,Client/Server(简称C/S)。这种模式的建立基于以下两点:
- 非对等作用
- 异步通信
下面说明基于TCP和UDP的socket技术
基于TCP的SOCKET技术
流式套接字(SOCK_STREAM):
提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。
程序设计思路如下:
服务端:
- 创建套接字 socket()
- 将套接字绑定到本地地址和一个端口上 bind()
- 将套接字设为监听模式,准备接受客户端的请求 listen()
- 等待客户端请求到来;在请求到达以后,接受连接请求,返回一个新的对应词连接的套接字 accept()
- 用返回的套接字和客户端通信 send/recv()
- 返回,等待另一客户的请求
- 关闭套接字
客户端:
- 创建套接字 socket()
- 向服务端发送连接请求 connect()
- 和服务器端进行通信 send/recv()
- 关闭套接字
客户端不用绑定端口,因为当服务器接收到请求是已经记录下客户端的端口号。
基于UDP的SOCKET技术
数据报式套接字(SOCK_DGRAM):
提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。
程序设计思路如下:
服务端:
- 创建套接字 socket()
- 将套接字绑定到本地地址和一个端口上 bind()
- 在套接字上读/写数据,直到完成交换 send/recv()
- 关闭套接字 closesocket()
客户端:
- 创建套接字 socket()
- 将套接字绑定到远程主机地址 bind()
- 在套接字上写/读数据,直到数据交换完成 send/recv()
- 关闭套接字 closesocket()
有此基本认识,可以去学习mini木马看看实际编程中Socket的用法啦