什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
http请求底层也是基于socket的。 另外Socket也就是我们通常说的TCP的封装形式。
socket通信流程:
socket是"打开—读/写—关闭"模式的实现,以使用TCP协议通讯的socket为例:
服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket
服务器为socket绑定ip地址和端口号
服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开
客户端创建socket
客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求
客户端连接成功,向服务器发送连接状态信息
服务器accept方法返回,连接成功
客户端向socket写入信息
服务器读取信息
客户端关闭
服务器端关闭
三次握手
第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手
Socket与服务端ServerSocket建立联系的三次握手过程:
(1)第一次握手:建立连接时,客户端Socket向服务端ServerSocket发送SYN包,并进入SYN_SEND状态,等待服务器B确认。这个过程,就好比我向你打电话,我的手机号通过信号到了你的手机上并显示 156XXXXXXXX来电,此时要等你确认这个手机号。
(2)第二次握手:此时服务端收到客户端的SYN包,与客户端的SYN进行确认,确认后,服务端向客户端发送个SYN包,即SYN+ACK 包。服务端进入SYN_RECV状态。这个过程就好比,当收到某人的来电后,我确认手机号是我的朋友,此时我要接通他的电话。
(3)第三次握手:客户端收到服务端发送过来的SYN + ACK包,此时客户端像服务端再发送一个ACK确认包。此时发送完毕后,客户端与服务端就进入了ESTABLISHED状态,完成通信前的三次握手。这个过程就好比,当我接通了电话后,我问对方是XXX吗?对方说是的!(妈的,终于可以交流了。。。)
相关推荐
在Windows环境下进行网络编程时,Socket通信是一种常用的技术。Socket接口是操作系统提供的网络通信API,允许应用程序通过TCP/IP协议栈与其他计算机进行数据交换。本文将详细介绍Windows下的Socket通信代码,包括...
Socket通信在IT行业中是网络编程的基础,特别是在C#这样的多平台开发环境中,Socket通信库的使用至关重要。...通过理解Socket通信的基本原理和C#中的相关类库,开发者可以构建出高效、稳定的服务端和客户端应用程序。
通过阅读和理解这些代码,你可以更好地掌握Mina与Socket通信的实现方法,并应用于自己的项目中。 总的来说,Mina与Socket结合使用,可以构建出高效、灵活的网络通信解决方案。Mina的高级抽象简化了网络编程的复杂性...
**C++ Socket通信库** C++ Socket通信库是用于实现网络通信的一种工具,它基于操作系统提供的Socket接口,为开发者提供了一种在C++程序中进行网络数据交换的标准方法。Socket库简化了网络编程,允许程序员通过调用...
Socket通信是一种基于网络协议(如TCP/IP)...通过分析和理解这些代码,你可以进一步掌握Socket通信的原理和应用。记住,实际的Socket编程可能会涉及异常处理、多线程或异步I/O等复杂情况,以确保通信的稳定性和效率。
首先,要理解Socket通信的基本概念。Socket可以视为通信的两端,一个作为服务器端(Server Socket),等待客户端的连接请求;另一个作为客户端端(Client Socket),主动发起连接请求。一旦连接建立,双方就可以通过...
源码的阅读和理解可以帮助你更好地掌握Socket通信的原理和实现。 总的来说,"简单的socket通信"是一个基础的网络编程实例,它展示了如何在两个应用程序之间建立TCP连接并进行数据交换。通过这个实例,你可以学习到...
综上所述,Android与PC之间的Socket通信涉及TCP协议的理解、Socket编程的基本步骤、异常处理、权限管理以及可能的第三方库使用。开发者需要对这些知识点有深入的了解和实践,才能实现稳定、高效的网络通信。
源程序可能包含了服务器端和客户端的示例代码,通过阅读和理解这些代码,你可以更深入地了解Socket通信文件传输的实现细节。 总的来说,Socket通信文件传输是一种基础且强大的网络编程技术,广泛应用于分布式系统...
在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,...理解并熟练掌握Socket通信,对于开发实时交互的应用,如聊天、游戏等,至关重要。通过实践和不断优化,你可以构建出高效、稳定的网络通信系统。
本实例将深入解析客户端和服务器端的Socket通信流程,帮助你理解并掌握这一核心技术。 首先,我们要理解Socket的基本概念。在计算机网络中,Socket就像一个通信端口,允许两个应用程序通过网络进行数据交换。在TCP/...
SOCKET通信调试工具是一款专为开发者设计的实用辅助软件,旨在简化SOCKET通信的调试过程。在编程领域,SOCKET是网络通信的基础,它允许不同设备间的程序通过互联网进行数据交换。这款工具允许用户在本地环境中模拟...
首先,我们需要理解Socket通信的基本流程: 1. **服务器端**: - 创建`ServerSocket`实例,指定一个端口号,监听该端口等待客户端连接。 - 使用`accept()`方法接收客户端的连接请求,这会阻塞直到有客户端连接。 ...
在这个"**c# Socket通信源码**"中,我们主要会看到客户端和服务器端的实现,这有助于理解如何在C#环境下使用Socket进行网络通信。 首先,让我们深入了解一下Socket的基本概念。Socket是网络上的进程间通信(IPC)的...
本资源提供的BTW 6.1.0.1506 DK可能是一个封装好的蓝牙SDK,其中包含了蓝牙Socket通信所需的各种类和方法,使得开发者无需深入理解底层细节,就能快速地实现蓝牙连接和文件传输功能。SDK可能包含如下组件: - **连接...
本篇文章将详细探讨C#中如何使用AES加密进行Socket通信,以及涉及的TCP/IP协议。 首先,让我们了解Socket通信的基础。Socket是操作系统提供的网络编程接口,它允许应用程序通过TCP/IP协议发送和接收数据。在C#中,`...
Socket通信是计算机网络编程中的重要概念,特别是在C#这样的高级编程语言中,它提供了一种在不同设备间进行数据传输的机制。本压缩包“Socket通信.zip”包含了一个基于C#实现的Socket通信实例,主要涉及到TCP协议的...
本教程将详细解释如何在Android中实现Java和C的Socket通信,特别是在涉及文件描述符传递的场景下。 1. **Java Socket基础** Java中的`java.net.Socket`类提供了网络通信的能力,它允许我们在两个应用程序之间建立...
学习这个示例,初学者不仅可以理解Delphi中Socket通信的基本原理,还能了解到如何使用API函数进行低级别网络编程。此外,这个例子也可以作为基础,进一步探索多线程处理、异步通信、错误处理等高级主题。 总之,...
本示例"C# Socket通信 Demo"旨在帮助开发者理解如何在C#环境中实现客户端(SocketClient)与服务器端(SocketServer)之间的数据交互。以下是对这个Demo的详细解析: 首先,Socket是网络通信的基础,它代表了网络上...