受欢迎的博客标签

Socket基础知识

Published

 

一、socket 版本

socket 套接字TCP有两个版本1.1和2.0。在Visual C++的MFC类库中,提供了两个与WinSock相关的类,分别为CAsyncSocket类和CSocket类。这两个类对WinSock API进行了封装,使得开发Windows Socket应用程序变得简单了。

二、不同版本是有区别。

例如1.1版只支持TCP/IP协议,而2.0版可以支持多协议。2.0版有良好的向后兼容性,任何使用1.1版的源代码、二进制文件、应用程序都可以不加修改地在2.0规范下使用。此外winsock 2.0支持异步 1.1不支持异步.

三、版本的选择。

初始化时WSAStartup的功能之一就是协商版本。 MAKEWORD( 1, 1 ),MAKEWORD( 2, 2 ) 代表2.2版本。 #include "stdafx.h"     

#include <stdio.h>   #include <Winsock2.h> //windows socket的头文件      #pragma comment( lib, "ws2_32.lib" )// 链接Winsock2.h的静态库文件  

四、如何获取本系统的socket版本

WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {/* Tell the user that we could not find a usable *//* WinSock DLL. */return;}/* Confirm that the WinSock DLL supports 1.1.*//* Note that if the DLL supports versions greater *//* than 1.1 in addition to 1.1, it will still return *//* 1.1 in wVersion since that is the version we *//* requested. */if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {/* Tell the user that we could not find a usable *//* WinSock DLL. */WSACleanup( );return; }/* The WinSock DLL is acceptable. Proceed. */

五、  

六、Socket,TCP,UDP,HTTP,WebSocket的区别

HTTP、Socket、TCP位置关系

TCP 是传输控制协议,面向连接,传输数据流。是TCP/IP协议的传输层协议。

TCP、UDP是两种不同的通信机制,Socket只是对两者做了API封装

socket 是对TCP/IP协议的封装。创建Socket连接时,可以指定使用的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

HTTP基于TCP

 

WebSocket:同HTTP一样也是应用层的协议,TCP

TCP,UDP:是一种传输方式,比如去北京,可以选择飞机、火车等交通方式。

 

WebSocket:同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。  

socket

TCP、UDP,HTTP 底层通信都是通过 socket 套接字实现 。

七层协议 

https://www.cnblogs.com/cmyxn/p/6360474.html

 

在创建 HttpClient 时,其中常用的传入参数类型就是 HttpClientHandler 和 SocketsHttpHandler 类型

从 .NET Core 2.1 开始,默认的 HttpClient 底层的网络通讯实现就是靠 System.Net.Http.SocketsHttpHandler 实现的,替代了原先的 HttpClientHandler 类型。

在 dotnet 6 采用的 HttpClient 底层使用的是 SocketsHttpHandler 类型作为默认的网络通讯。

无论你在 HttpClient 传入的参数类型是 SocketsHttpHandler 还是 HttpClientHandler 类型,在 dotnet 6 都会实际上调用到 SocketsHttpHandler 类型

dotnet 6 HttpClientHandler 和 SocketsHttpHandler 有什么差别

https://cloud.tencent.com/developer/article/2071585

TCP

基于C#的内网穿透学习笔记(附源码)- TcpListener

TCP+IOCP方式,相对 “面向对象”地实现穿透!(TcpClient+TcpListener )

https://www.cnblogs.com/qqljcn/p/13738595.html

 

C#编写内网穿透程序 -TcpListener

https://zhuanlan.zhihu.com/p/618978273

https://gitee.com/snltty/p2p-tunnel

socket

使用socket实现http服务器和发送http请求

https://www.jianshu.com/p/fbdefa955e87

在 HttpClient 的构造函数传入 HttpMessageHandler 类型的参数

SocketsHttpHandler

https://cloud.tencent.com/developer/article/2071585

 

Socket

new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

https://blog.csdn.net/diwuci123/article/details/118991897

 

基于C#的内网穿透学习笔记 (Socket )

 this.listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

https://www.cnblogs.com/qqljcn/p/13738595.html

Websocket

基于Yarp实现内网http穿透

https://blog.csdn.net/sD7O95O/article/details/118616751

.NETCore Server listening WebSockets

https://mp.weixin.qq.com/s/EzGbotrw6cx_DD7n0ZMbNA

 

.NET + SignalR

.NET + SignalR 的反向代理 websocket/http 数据隧道

https://cloud.tencent.com/developer/article/2290673

https://github.com/viordash/TuToDataTunnel

 

C# HttpListener

https://www.zetcode.com/csharp/httplistener/