Linux--网络指令UDP,TCPwindows连接服务器

news2024/9/22 19:44:48

网络指令

ping命令

  用来检测网络连通性的。 

比如ping 百度的官网

ping www.bai.com

这个指令执行后默认是不会停下来的,我们可以加入 -c + 数字选项,表示要ping几次

比如ping两次

ping -c2 www.bai.com

netstat

查看所有的网络连接活动

netstat -a

 查看当前会话UDP的网络活动

netstat -u

查看所有会话的UDP的网络活动

netstat -au

 查看TCP的

netstat -t

查看所有会话的同理

往后面再加一个p选项,可以查看到这个程序的PID和进程名字

netstat -atp

我们发现再PID那里有很多是空的,空的就说明这是系统启动的,或者是其他用户启动的网络进程,我们作为普通用户是看不到的。用root身份就可以看到了。

另外在主机那里可以看到很多的 localhost,我们可以再加上n选项,把这些转化成为数字

netstat -atpn

 这样就可以看到localhost被转为成为了 127.0.0.1 。

netstat -tl

会把只处于监听状态的tcp进程显示出来

watch指令

可以周期性的执行某一个linux指令

watch -n 1 ls

 -n 后面接数字,表示每个多少秒执行一次,后面接要执行的指令

这个指令配合netstat可以监控当前网络进程的信息,很好用。

pidof 

pidof + 网络进程名

 执行这个指令,就可以直接返回该网络进程的PID。

适用于服务器在后台运行时,我们想通过kill 命令来杀掉服务器时,为了得到服务器的PID比较繁琐的问题,直接用该指令获得PID很方便快捷。

甚至可以直接结合管道,直接杀掉服务器

pidof 进程名 | xargs kill -9

 其中 xargs的作用是将管道中的内容,转化到后续命令的命令行参数中,因为通过kill命令杀掉进程,是需要将该进程的PID通过命令行参数传入给kill程序的。

管道也是一个文件。

Windows作为UDP客户端访问linux的DUP服务器 

因为大部分的客户端都是在Windows上的,所以这里也就重点看下一下在Windows下,编写客户端有和不同

client.cc

#include <iostream>
#include <cstdio>
#include <thread>
#include <string>
#include <cstdlib>
#include <WinSock2.h>
#include <Windows.h>

#pragma warning(disable : 4996)
#pragma comment(lib, "ws2_32.lib")
std::string serverip = "";  // 填写你的云服务器ip
uint16_t serverport = 8888; // 填写你的云服务开放的端口号

int main()
{
    WSADATA wsd;
    WSAStartup(MAKEWORD(2, 2), &wsd);
    struct sockaddr_in server;
    memset(&server, 0, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(serverport); //?
    server.sin_addr.s_addr = inet_addr(serverip.c_str());
    SOCKET sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd == SOCKET_ERROR)
    {
        std::cout << "sockererror" << std::endl;
        return 1;
    }
    std::string message;
    char buffer[1024];
    while (true)
    {
        std::cout << "PleaseEnter@";
        std::getline(std::cin, message);
        if (message.empty())
            continue;
        sendto(sockfd, message.c_str(), (int)message.size(), 0,
            (struct sockaddr*)&server, sizeof(server));
        struct sockaddr_in temp;
        int len = sizeof(temp);
        int s = recvfrom(sockfd, buffer, 1023, 0, (struct sockaddr*)&temp, &len);
        if (s > 0)
        {
            buffer[s] = 0;
            std::cout << buffer << std::endl;
        }
    }
    closesocket(sockfd);
    WSACleanup();
    return 0;
}
#include <WinSock2.h>
#include <Windows.h>

与linux不同的是要包含这两个头文件 

#pragma comment(lib, "ws2_32.lib")

开头这里是声明了一个库。

 WSADATA wsd;
 WSAStartup(MAKEWORD(2, 2), &wsd);
  • WSADATA 是一个结构体类型,它包含了Winsock版本信息和状态信息。这个结构体通常在调用 WSAStartup 函数时由该函数填充。
  • wsd 是 WSADATA 类型的一个变量,用于存储 WSAStartup 函数返回的信息。这些信息包括Winsock DLL的版本信息,以及用于后续Winsock调用(如 socketbindlistenaccept 等)的句柄或标识符。
  • WSAStartup 是Winsock API的一个函数,用于初始化Winsock DLL。在应用程序调用任何Winsock函数之前,必须先调用 WSAStartup
  • MAKEWORD(2, 2) 是一个宏调用,用于生成一个表示Winsock版本号的单词(WORD)。这里,2, 2 分别代表Winsock的主版本号和次版本号,即Winsock 2.2。Winsock 2.2是Winsock 2的一个版本,提供了更丰富的网络编程接口和更好的性能。
  • &wsd 是 wsd 变量的地址,即指向 WSADATA 结构体的指针。WSAStartup 函数使用这个指针来填充 WSADATA 结构体,以返回关于Winsock DLL版本和状态的信息。

 

然后中间其他的地方就和linux上大差不差了,然后在结尾这里关闭之前打开的套接字

closesocket(sockfd);
WSACleanup();

WinSock2.h是WindowsSocketsAPI(应用程序接口)的头文件,用于在 Windows平台上进行网络编程。它包含了WindowsSockets2(Winsock2)所需 的数据类型、函数声明和结构定义,使得开发者能够创建和使用套接字 (sockets)进行网络通信。 在编写使用Winsock2的程序时,需要在源文件中包含WinSock2.h头文件。这 样,编译器就能够识别并理解Winsock2中定义的数据类型和函数,从而能够正确 地编译和链接网络相关的代码。 此外,与WinSock2.h头文件相对应的是ws2_32.lib库文件。在链接阶段,需要 将这个库文件链接到程序中,以确保运行时能够找到并调用Winsock2API中实现 的函数。 在WinSock2.h中定义了一些重要的数据类型和函数,如: WSADATA:保存初始化Winsock库时返回的信息。 

WSAStartup函数是WindowsSocketsAPI的初始化函数,它用于初始化 Winsock库。该函数在应用程序或DLL调用任何Windows套接字函数之前必须首 先执行,它扮演着初始化的角色。 以下是WSAStartup函数的一些关键点: 它接受两个参数:wVersionRequested和lpWSAData。

wVersionRequested用于 指定所请求的Winsock版本,通常使用MAKEWORD(major,minor)宏,其中 major和minor分别表示请求的主版本号和次版本号。lpWSAData是一个指向 WSADATA结构的指针,用于接收初始化信息。 如果函数调用成功,它会返回0;否则,返回错误代码。

WSAStartup函数的主要作用是向操作系统说明我们将使用哪个版本的Winsock 库,从而使得该库文件能与当前的操作系统协同工作。成功调用该函数后, Winsock库的状态会被初始化,应用程序就可以使用Winsock提供的一系列套接字 服务,如地址家族识别、地址转换、名字查询和连接控制等。这些服务使得应用程 序可以与底层的网络协议栈进行交互,实现网络通信。 在调用WSAStartup函数后,如果应用程序完成了对请求的Socket库的使用,应 调用WSACleanup函数来解除与Socket库的绑定并释放所占用的系统资源。 

WindowsTCP客户端的访问

 其实跟UDP没什么区别了

#include <winsock2.h>
#include <iostream>
#include <string>
#pragma warning(disable : 4996)
#pragma comment(lib, "ws2_32.lib")
std::string serverip = "";  // 填写你的云服务器ip
uint16_t serverport = 8888; // 填写你的云服务开放的端口号

int main()
{
    WSADATA wsaData;
    int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (result != 0)
    {
        std::cerr << "WSAStartupfailed:" << result << std::endl;
        return 1;
    }
    SOCKET clientSocket = socket(AF_INET, SOCK_STREAM,
        IPPROTO_TCP);
    if (clientSocket == INVALID_SOCKET)
    {
        std::cerr << "socketfailed" << std::endl;
        WSACleanup();
        return 1;
    }
    sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(serverport);
    serverAddr.sin_addr.s_addr = inet_addr(serverip.c_str());
    result = connect(clientSocket, (SOCKADDR*)&serverAddr,
        sizeof(serverAddr));
    if (result == SOCKET_ERROR)
    {
        std::cerr << "connect failed" << std::endl;
        closesocket(clientSocket);
        WSACleanup();
        return 1;
    }
    while (true)
    {
        std::string message;
        std::cout << "Please Enter@ ";
        std::getline(std::cin, message);
        if (message.empty())
            continue;
        send(clientSocket, message.c_str(), message.size(), 0);
        char buffer[1024] = { 0 };
        int bytesReceived = recv(clientSocket, buffer,
            sizeof(buffer) - 1, 0);
        if (bytesReceived > 0)
        {
            buffer[bytesReceived] = '\0'; // 确保字符串以 null 结尾
            std::cout << "Received from server: " << buffer << std::endl;
        }
        else
        {
            std::cerr << "recv failed" << std::endl;
        }
    }
    closesocket(clientSocket);
    WSACleanup();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《云原生安全攻防》-- K8s攻击案例:高权限Service Account接管集群

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 在本节课程中…

提高编程效率的秘密武器:探索高效开发工具

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 一、工具介绍 Visual Studio Code (VS Code) Docker GitHub 二、效率对比 三、未来趋…

详细解说一下Python中的递归和基例

大家好&#xff0c;感谢阅读胡萝卜不甜的文章&#xff0c;谢谢你的关注和点赞。好戏马上开始 考点&#xff1a; 递归函数是一种在函数定义中调用自身的函数。递归函数通常包含两个主要部分&#xff1a;递归部分和基例&#xff08;也称为递归终止条件&#xff09;。 递归部分&am…

给你的头像加个口罩网站html源码

源码介绍 给你的头像加个口罩网站html源码&#xff0c;html网页源码&#xff0c;直接打开即可使用&#xff0c;也可以上传到网站。 效果预览 源码获取 给你的头像加个口罩网站html源码

【亚马逊运营经验帖】跨境选品9大实操策略,小白必看!

一个新手卖家要想在亚马逊这个庞大的平台上分得一杯羹&#xff0c;不深入了解一些选品的技巧恐怕是不行的。七分靠选品&#xff0c;三分靠运营。可见选品的成功与否对于一个 listing 能否快速爆单至关重要&#xff0c;这篇文章是从帮助小白的角度去分析选品的一些基本思路。 1…

科研论文必须要了解的25个学术网站

各位同学大家好&#xff0c;我是Toby老师&#xff0c;今天介绍一下科研论文必须要了解的25个学术网站。下述论文网站收藏内容有差异&#xff0c;大家可以检索比较。 1.SCI SCI&#xff08;Science Citation Index&#xff09;是一个学术引文数据库&#xff0c;收录了全球多个学…

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(5)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层&#xff08;4&#xff09; 7.1 数据链路层的组成结构 7.1.1 数据链路层的状态 数据链路层需要通过物理层监控PCIe链路的状态&#xff0c;并维护数据链路层的“控制与…

鸿蒙开发画廊效果

鸿蒙开发画廊效果&#xff1a; 画廊这种效果确实不错&#xff0c;看起来高端大气。在Android那边已经有不少案例了&#xff0c;但是鸿蒙这边还是很少。今天来分享一个。 先看下效果图&#xff1a; 没法弄gif,就是左右可以看到前一张&#xff0c;下一张。 也可以看我b站完整的…

C# 编译程序引用C++DLL托管动态链接库实例

构建 C# 程序引用CDLL托管动态链接库 前言1、统一框架版本2、统一编译平台3、C 托管动态链接库的优点3.1、C 托管动态链接库引用方便简单3.2、C 托管动态链接库加快了程序构建和重复利用3.3、C 托管动态链接库源代码更加安全 4、构建与 C# 程序进行互操作的C.DLL动态链接库的三…

UTB定位技术能不能精准定位

在当今科技日新月异的时代&#xff0c;定位技术以其广泛的应用场景和不断提升的精度&#xff0c;成为了多个领域的核心支撑。其中&#xff0c;UTB定位技术以其高精度、低延迟和高抗干扰性等特点&#xff0c;在众多定位技术中脱颖而出&#xff0c;成为精准定位领域的佼佼者。那么…

ContentProvider 数据供给方

作用 ContentProvider使用数据库模型的基本表格来提供需要共享的数据 表格每一行表示一条记录&#xff08;都包含"_ID"字段&#xff09;&#xff0c;每一列表示该类型的数据 URI 作用 资源的唯一标识符——提供数据位置 组成 scheme: 一般 "content:/"…

病理AI重点方向:普通HE与免疫组化之间的关系|文献速递·24-09-03

小罗碎碎念 本期推文主题&#xff1a;免疫组化 这一期的推文很有意思&#xff0c;看完第一篇文献就知道了——兽医写的与免疫组化相关的内容——普渡大学兽医学院比较病理学系。 最近一直在了解免疫组化与HE之间的关系&#xff0c;在阅读文献的时候&#xff0c;无意间看到了第…

HashMap底层逻辑理解(数组+链表+红黑树)

jdk1.7底层是由数组链表实现jdk1.8底层是由数组链表红黑树实现 以下都是数组链表红黑树对应的描述&#xff1a; public static void main(String[] args) {HashMap<String, String> map new HashMap<>();map.put("Aa", "Value1");map.put(&…

捷邻系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品分类管理&#xff0c;商品信息管理&#xff0c;促销产品管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&#…

如何处理海量数据

目录 1.海量数据简介 海量数据的产生 海量数据的处理 2.利用位图解决 题目一 题目二 题目三 题目一变形 3.利用布隆过滤器解决 题目一 4.哈希切割解决 题目一 题目二 5.海量数据处理总结 1.海量数据简介 海量数据的产生 随着互联网的迅速发展&#xff0c;互联…

堆排、快速排序、归并排序等总结

十大经典排序算法大梳理 (动图代码)&#xff08;动态图参考&#xff09; 排序算法平均时间复杂度最差时间复杂度空间复杂度数据对象稳定性冒泡排序O(n2)O(n2)O(1)稳定选择排序O(n2)O(n2)O(1)数组不稳定、链表稳定插入排序O(n2)O(n2)O(1)稳定快速排序O(n*log2n)O(n2)O(log2n)不…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《省间中长期市场连续运营下考虑耦合安全约束的电力交易联合优化出清模型》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Docker笔记-Docker容器使用

Docker笔记-Docker容器使用 1、Docker 客户端 docker 客户端非常简单&#xff0c;我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。 $ docker可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。 例如我们要查看 docker sta…

用vs附加运行的软件并打断点

需求&#xff1a;给一个代码文件A的第n行打断点。 前提&#xff1a;目标软件已经build完成。并且生成了对应的pdb文件P。 0 将要打断点的代码&#xff0c;所在生成的pdb文件放到exe相同目录下。 1 运行程序。 2 打开vs&#xff0c;并打开文件A。并在n行打上断点。&#xff…

视觉SLAMch4——李群和李代数

一、李群和李代数在SLAM中的定位&#xff08;如何解决SLAM中的问题&#xff09; 在视觉SLAM中&#xff0c;我们的目标之一是估计传感器&#xff08;通常是摄像头&#xff09;在每一时刻的位置和姿态。为了量化估计的好坏&#xff0c;我们需要定义一个误差函数&#xff0c;该函数…