服务器知识之服务器的端口号有哪些分类?

服务器知识之服务器的端口号有哪些分类?,第1张

发布时间:2019-08-28

我们开展网上业务进行服务器租用的时候,会听到服务商说服务器端口号,不同的端口号针对的服务类型也有很大的区别,因此服务器的端口号分别代表着提供不同的服务。下面众一互联的我就详细的给大家介绍服务器的端口号问题。

1注册端口号

我们所说的注册端口号主要是指1024到49151,很多的服务器都绑定与这个端口。这些端口没有明确的定义服务的对方,不同的程序根据实际需求自定义即可。

2动态或私有端口号

从49152到65535我们称之为动态或者私有端口号。这些端口对于木马程序来说是非常喜欢的,因此这些端口号常常不容易引起注意,非常容易隐蔽。

3公认端口号

我们公认的端口号主要是从从0到1023,这类端口号紧密的绑定与一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,且不可再重新定义它的作用对象。比如,80端口主要是>原因:
>#include <stdioh>
#include <stdlibh>
#include <stringh>
#include <unistdh>
#include <winsock2h>
#include <processh>
#define PROTOPORT 5188 / 监听套接字的缺省协议端口号 /
#define QLEN 6 / 监听套接字的请求队列大小 /
#define MAX 1000
HANDLE hMutex;
int flag;
void Send(SOCKET client);
void Recv(SOCKET client);
int main(int argc,char argv[])
{
//初始化DLL
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
struct sockaddr_in servaddr; / 存放服务器网络地址的结构 /
struct sockaddr_in clientaddr; / 存放客户网络地址的结构 /
SOCKET listenfd; / 监听套接字描述符 /
SOCKET clientfd; / 响应套接字描述符 /
int port; / 协议端口号 /
int alen; / 地址长度 /
memset((char)& servaddr, 0, sizeof(servaddr));/ 清空sockaddr结构 /
servaddrsin_family = AF_INET; / 设置为因特网协议族 /
servaddrsin_addrs_addr = INADDR_ANY; / 设置本地IP地址 /
/ 检查命令行参数,如果指定了,就是用该端口号,否则使用缺省端口号 /
if(argc > 1){
port = atoi(argv[1]); / 如果指定了端口号,就将它转换成整数 /
} else {
port = PROTOPORT; / 否则,使用缺省端口号 /
}
if(port> 0) / 测试端口号是否合法 /
servaddrsin_port=htons((u_short)port);
else{ / 打印错误信息并退出 /
fprintf(stderr, "bad port number %s\n", argv[1]);
exit(1);
}
/ 创建一个用于监听的流式套接字 /
listenfd = socket(AF_INET,SOCK_STREAM,0);
if (listenfd <0) {
fprintf(stderr, "socket creation failed\n");
exit(1);
}
/ 将本地地址绑定到监听套接字/
if (bind(listenfd,(struct sockaddr )& servaddr, sizeof(servaddr)) < 0){
fprintf(stderr, "bind failed\n");
exit(1);
}
/ 开始监听,并指定监听套接字请求队列的长度 /
if (listen(listenfd, QLEN) < 0){
fprintf(stderr, "listen filed\n");
exit(1);
}
hMutex=CreateMutex(NULL,FALSE,NULL);//创建互斥量
/ 服务器主循环—接受和处理来自客户端的连接请求 /
char sendbuf[MAX];
while(1) {
alen = sizeof(clientaddr); / 接受客户端连接请求,并生成响应套接字 /
if((clientfd = accept(listenfd, (struct sockaddr )& clientaddr, &alen)) < 0 ) {
fprintf(stderr, "accept failed\n");
exit(1);
}
flag=1;
printf("Received a connection:%s\n",inet_ntoa(clientaddrsin_addr));
/创建一个循环接收数据的线程/
HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Recv,(LPVOID)clientfd,0,0);
if(hThread!=NULL)
{
CloseHandle(hThread);
}
while(flag!=0)
{
gets(sendbuf);
send(clientfd,sendbuf,sizeof(sendbuf),0);//发送数据
}
}
closesocket(listenfd);
WSACleanup();
return 0;
}
void Recv(SOCKET client)
{
char recvbuf[MAX];
int n=0;
while(strcmp(recvbuf,"exit"))
{
WaitForSingleObject(hMutex,INFINITE);//上锁,防止接收数据时被影响
n=recv(client,recvbuf,sizeof(recvbuf),0);
if(n>0) {
recvbuf[n]=0;
printf(" 客户端: %s\n",recvbuf);
}
ReleaseMutex(hMutex);
Sleep(100);
}
closesocket(client);
printf("与该用户断开连接");
flag=0;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13482972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-16
下一篇 2023-08-16

发表评论

登录后才能评论

评论列表(0条)

保存