linux下一个简单的基于IPv6(UDP)的回显服务器程序

简介:

 话不多说,直接上源码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/** 
  *@author walker 
  *@date 2012.9 
  */ 
  
#include <unistd.h> 
#include <arpa/inet.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
  
#define UDP_PORT 6000   //预定义的端口号 
#define MAXSIZE 8192 
  
//实际使用端口号 
int  g_udp_port = UDP_PORT; 
  
//用于回显的函数 
void  echo_fn( int  sockfd); 
  
int  main( int  argc,  char  *argv[]) 
     //获取用户输入的端口号 
     if  (argc > 1) 
    
         g_udp_port =  atoi (argv[1]); 
    
     if  (g_udp_port <= 0 || g_udp_port > 65535) 
    
         perror ( "Invalid port.\n" ); 
         return  -1; 
    
  
     int  sockfd;      //套接字描述符 
     struct  sockaddr_in6 addr;    //用于UDP的IPv6地址结构 
  
     if ((sockfd = socket(AF_INET6, SOCK_DGRAM,0)) == -1) 
    
         printf ( "Error in socket\n" ); 
         return  -1; 
    
  
     bzero(&addr,  sizeof (addr)); 
     addr.sin6_family = AF_INET6; 
     addr.sin6_port = htons(g_udp_port); 
     addr.sin6_addr = in6addr_any; 
  
     if (bind(sockfd, ( struct  sockaddr *)&addr,  sizeof ( struct  sockaddr_in6)) == -1) 
    
         printf ( "Error in binding\n" ); 
         return  -1; 
    
  
     echo_fn(sockfd);     //调用回显函数 
  
     close(sockfd);       //关闭套接字 
  
     return  -1; 
  
//用于回显的函数 
void  echo_fn( int  sockfd) 
     char  data[MAXSIZE]; 
     int  n = 0; 
     socklen_t len =  sizeof ( struct  sockaddr_in6); 
     struct  sockaddr_in6 addr; 
  
     while (1) 
    
         printf ( "Waiting for data...\n" ); 
  
         //接受从客户端发来的数据 
         if ((n = recvfrom(sockfd, data, MAXSIZE, 0, ( struct  sockaddr *)&addr, &len)) == -1) 
        
             printf ( "Error in receiving\n" ); 
             exit (-1); 
        
         data[n] =  '\0'
  
         printf ( "Received data: %s\n" , data); 
         //将收到的数据再发送回去 
         sendto(sockfd, data, n, 0, ( struct  sockaddr *)&addr, len); 
  
         //存储用"冒号十六进制记法"表示的IPv6地址 
         char  buf_addr[40]; 
         //将IPv6地址转为"冒号十六进制记法"(colon hexadecimal notation)表示 
         inet_ntop(AF_INET6, &addr.sin6_addr, buf_addr, 64); 
  
         printf ( "Client ip: %s\n" , buf_addr); 
         printf ( "Client port: %d\n" , ntohs(addr.sin6_port)); 
         printf ( "\n" ); 
    
}


*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1006583如需转载请自行联系原作者

RQSLT
相关文章
|
11月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
2088 21
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
1109 13
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
721 24
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
925 28
|
12月前
|
监控 Linux 网络安全
FinalShell SSH工具下载,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux
FinalShell是一款国人开发的多平台SSH客户端工具,支持Windows、Mac OS X和Linux系统。它提供一体化服务器管理功能,支持shell和sftp同屏显示,命令自动提示,操作便捷。软件还具备加速功能,提升访问服务器速度,适合普通用户和专业人士使用。
3777 0
|
存储 安全 Ubuntu
从Linux到Windows:阿里云服务器系统镜像适配场景与选择参考
阿里云为用户提供了丰富多样的服务器操作系统选择,以满足不同场景下的应用需求。目前,云服务器的操作系统镜像主要分为公共镜像、自定义镜像、共享镜像、镜像市场和社区镜像五大类。以下是对这些镜像类型的详细介绍及选择云服务器系统时需要考虑的因素,以供参考。
|
Linux
Linux下版本控制器(SVN) -服务器端环境搭建步骤
Linux下版本控制器(SVN) -服务器端环境搭建步骤
529 0
Linux下版本控制器(SVN) -服务器端环境搭建步骤
|
存储 安全 Linux
Linux服务器上安装配置GitLab的步骤。
按照以上步骤,一个基础的GitLab服务应该运行并可以使用。记得定期检查GitLab官方文档,因为GitLab的安装和配置步骤可能随着新版本而变化。
1046 0
|
数据挖掘 Linux 数据库
服务器数据恢复—Linux系统服务器数据恢复案例
服务器数据恢复环境: linux操作系统服务器中有一组由4块SAS接口硬盘组建的raid5阵列。 服务器故障: 服务器工作过程中突然崩溃。管理员将服务器操作系统进行了重装。 用户方需要恢复服务器中的数据库、办公文档、代码文件等。