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
相关文章
|
1天前
|
网络协议 Java API
【JavaEE】——Udp翻译器的实现(回显服务器)
网络编程,DatagramSocket 和 DatagramPacket类,回显服务器,服务器实现,客户端实现,
W9
|
29天前
|
运维 关系型数据库 MySQL
轻松管理Linux服务器的5个优秀管理面板
Websoft9 应用管理平台,github 2k star 开源软件,既有200+的优秀开源软件商店,一键安装。又有可视化的Linux管理面板,文件、数据库、ssl证书方便快捷管理。
W9
85 1
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
38 4
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
64 4
|
1月前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
1月前
|
运维 监控 Linux
服务器管理面板大盘点: 8款开源面板助你轻松管理Linux服务器
在数字化时代,服务器作为数据存储和计算的核心设备,其管理效率与安全性直接关系到业务的稳定性和可持续发展。随着技术的不断进步,开源社区涌现出众多服务器管理面板,这些工具以其强大的功能、灵活的配置和友好的用户界面,极大地简化了Linux服务器的管理工作。本文将详细介绍8款开源的服务器管理面板,包括Websoft9、宝塔、cPanel、1Panel等,旨在帮助运维人员更好地选择和使用这些工具,提升服务器管理效率。
|
1月前
|
安全 算法 Linux
Linux 服务器还有漏洞?建议使用 OpenVAS 日常检查!
在数字化时代,Linux 服务器的安全至关重要。OpenVAS 是一款优秀的开源漏洞扫描工具,可以帮助及时发现并修复服务器中的安全隐患。本文将介绍 OpenVAS 的主要功能、使用方法及应对漏洞的措施,帮助用户加强服务器安全管理,确保企业数字化安全。
59 7
|
20天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
1月前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
1月前
|
安全 Linux API
Linux服务器安全
人们常误认为服务器因存于数据中心且数据持续使用而无需加密。然而,当驱动器需维修或处理时,加密显得尤为重要,以防止数据泄露。Linux虽有dm-crypt和LUKS等内置加密技术,但在集中管理、根卷加密及合规性等方面仍存不足。企业应选择具备强大验证、简单加密擦除及集中管理等功能的解决方案,以弥补这些缺口。
26 0