精华内容
下载资源
问答
  • 我们知道处于同一局域网的两台计算机,进行通信的方式很简单,可以直接通过局域网内的私有ip定位计算机。但是如果要访问外网即非本局域网的计算机就相对而言比较复杂。 下边为了更好的理解这个过程,我从几个问题...

    我们知道处于同一局域网的两台计算机,进行通信的方式很简单,可以直接通过局域网内的私有ip定位计算机。但是如果要访问外网即非本局域网的计算机就相对而言比较复杂。

    下边为了更好的理解这个过程,我从几个问题说起:

    1.要访问一台远程非局域网的计算机,哪些是必须知道的?

             我们知道,网络中IP地址+端口号可以唯一锁定一台网络中的计算机。所以,必须要知道这台计算机在网络中的IP,以及要通信的端口号。如果这台计算机处于另一个局域网,则我们无法读到它的私网ip,但是我们可以得到这个局域网的公网IP及对应的端口号。

    2.那通过什么方式获得这台计算机的公网IP和对应的端口号呢?

            据我所了解,可以通过使用公共服务器来达到此目的。比如说,以新浪的服务器为例,两台计算机都可以访问新浪的服务器,那么新浪的服务器肯定会有两台计算机的公网IP及对应的端口号,其实也不一定就是,但肯定是处于两者之间,进而可以一步步实现通信的中间路由器的IP及端口号。当需要访问另一台计算机时,新浪服务器会将这台计算机的公网IP和端口号发给本地计算机的公网IP及端口号,继而就得到了需要访问的计算机的端口号和公网IP地址。

    3.本地计算机访问远程计算机是数据帧中的MAC地址是填写的什么?

            本地计算机的源MAC是本地主机的网卡MAC地址,目标地址是局域网默认网关的MAC地址,IP源地址是主机地址,IP目的地址就是另一台计算机的公网IP,TCP/UDP里边的端口号是本地端口号和另一台计算机的公网映射的端口号。在 经过NAT(网络地址转换后),IP源地址变成本地公网IP地址,端口号也为对应的公网端口号,之后每经过一跳,对应的MAC地址即数据帧的帧头和帧尾会做相应的调整,其他的不会改变。

    4.。远程计算机的公网路由器接收到数据帧后怎么转发给指定的计算机

          做相应的NAT转换, 根据端口和私网的IP地址找到需要通信的计算机,再将数据帧发送给指定计算机的相应的端口号。

    展开全文
  • 计算机之间是如何实现通信

    千次阅读 2020-02-26 19:26:27
    所谓的计算机网络简单来说就是指通过某一种方式将多台计算机进行连接并实现计算机彼此之间的互联和数据交换。 在计算机网络中,计算机之间要实现连接和通信,就需要遵守一定的规则,我们把这种连接...

    如今,计算机网络已经成为我们日常生活的必需品,无论是工作时发送邮件,还是上网聊天,都离不开计算机网络,那么,什么是计算机网络呢?多台计算机之间是如何实现连接并且进行数据交换的呢?这篇文章小编为与你介绍!

    计算机网络

    所谓的计算机网络简单来说就是指通过某一种方式将多台计算机进行连接并实现计算机彼此之间的互联和数据交换

    在计算机网络中,计算机之间要实现连接和通信,就需要遵守一定的规则,我们把这种连接和通信的规则称为网络通信协议,它对数据的传输格式,传输速率和传输步骤等都做了统一规定,通信双方都必须遵守才能完成数据交换

    下面将介绍两种应用广泛的 TCP/IP 协议「包括了 TCP 协议,IP 协议,UDP 协议. ICMP 协议和其他一些协议的协议组」

    UDP 通信

    UDP 是一种面向无连接的协议,因此在通信时发送端和接受端不用建立连接

    接收端:在创建 DatagramSocket 对象时,指定其监听的端口号,然后发送端就可以根据这个端口号来与之通信。简单来说,接收端要做的事情就是DatagramSocket 对象通过 DatagramPacket 这个「包」来接收发送端发送的数据,DatagramPacket 调用方法获得「拆解」接收到的信息并显示给用户

    发送端:在创建 DatagramSocket 对象的时候需要指定目标 IP 地址和端口号,而且端口号必须和接收端指定的一致 「暗号」,这样调用 DatagramSocket 的 send 方法时才能将数据发送到对应的接收端

    TCP 通信

    TCP 和 UDP 一样,都能实现两台计算机之间的通信,两端都需要建立 Socket 对象,区别在于,UDP 中只有发送端和接收端,不区分客户端和服务端,而 TCP 通信严格区分客户端和服务端,在通信的时候,必须先由客户端去连接服务端才能实现通信**「进行三次握手」**,服务端不可以主动连接客户端

    服务端:在客户端发送数据前,服务端程序会暂时停止运行,accept()方法发生阻塞,直到客户端访问时才会结束这种阻塞状态

    客户端:在客户端创建 Socket 对象与服务器建立连接后,通过 Socket 对象获取输入流读取服务器端发来的数据,并打印结果

    原作者:企鹅号 - Java资源社区,有所修改

    展开全文
  • C语言通过socket编程实现TCP通信

    万次阅读 多人点赞 2018-01-02 13:46:27
    服务端客户端通信例子:socket tcp 通信1,socket tcp通信2,udp使用讲解,socket udp通信例子 1. TCP/IP协议 叫做传输控制/网际协议,又叫网络通信协议。实际上,它包含上百个功能的协议,如ICMP(互联网控制信息...

    目录

    1.  TCP/IP协议

    2.套接字(socket):

    3.下面给出server和client的两个例子

    服务端:

    客户端:


    服务端客户端通信例子:socket tcp 通信1socket tcp通信2udp使用讲解socket udp通信例子

    1.  TCP/IP协议

    叫做传输控制/网际协议,又叫网络通信协议。实际上,它包含上百个功能的协议,如ICMP(互联网控制信息协议)、FTP(文件传输协议)、UDP(用户数据包协议)、ARP(地址解析协议)等。TCP负责发现传输的问题,一旦有问题就会发出重传信号,直到所有数据安全正确的传输到目的地。

    2.套接字(socket)

        在网络中用来描述计算机中不同程序与其他计算机程序的通信方式。socket其实是一种特殊的IO接口,也是一种文件描述符。

    套接字分为三类:

        流式socket(SOCK_STREAM):流式套接字提供可靠、面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。

        数据报socket(SOCK_DGRAM):数据报套接字定义了一种无连接的服务,数据通过相互独立的保温进行传输,是无序的,并且不保证是可靠、无差错的。它使用的数据报协议是UDP。

        原始socket:原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用复杂,主要用于一些协议的开发。

    套接字由三个参数构成:IP地址,端口号,传输层协议。这三个参数用以区分不同应用程序进程间的网络通信与连接。

    套接字的数据结构:C语言进行套接字编程时,常会使用到sockaddr数据类型和sockaddr_in数据类型,用于保存套接字信息。

    两种结构体分别表示如下:

    struct sockaddr {
        //地址族,2字节
        unsigned short sa_family;
    
        //存放地址和端口,14字节
        char sa_data[14];
    }
    
    
    struct sockaddr_in {
        //地址族
        short int sin_family;
    
        //端口号(使用网络字节序)
        unsigned short int sin_port;
    
        //地址
        struct in_addr sin_addr;
    
        //8字节数组,全为0,该字节数组的作用只是为了让两种数据结构大小相同而保留的空字节
        unsigned char sin_zero[8]
    }
    

    对于sockaddr,大部分的情况下只是用于bind,connect,recvfrom,sendto等函数的参数,指明地址信息,在一般编程中,并不对此结构体直接操作。而用sockaddr_in来替。

    两种数据结构中,地址族都占2个字节,

    常见的地址族有:AF_INET,AF_INET6AF_LOCAL。

    这里要注意字节序的问题,最好使用以下函数来对端口和地址进行处理:

    1.  uint16_t htons(uint16_t host16bit) 把16位值从主机字节序转到网络字节序

        uint32_t htonl(uint32_t host32bit)  把32位值从主机字节序转到网络字节序

    2.  uint16_t ntohs(uint16_t net16bit) 把16位值从网络字节序转到主机字节序

        uint32_t ntohs(uint32_t net32bit)  把32位值从网络字节序转到主机字节序

    使用socket进行TCP通信时,经常使用的函数有:

     

    3.下面给出serverclient的两个例子

     

    更详细的例子

    服务端:

    /*socket tcp服务器端*/

    #include <sys/stat.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #define SERVER_PORT 6666
    
    /*
    监听后,一直处于accept阻塞状态,
    直到有客户端连接,
    当客户端如数quit后,断开与客户端的连接
    */
    int main() {
    
        //调用socket函数返回的文件描述符
    
        int serverSocket;
    
        //声明两个套接字sockaddr_in结构体变量,分别表示客户端和服务器
    
        struct sockaddr_in server_addr;
    
        struct sockaddr_in clientAddr;
    
        int addr_len = sizeof(clientAddr);
    
        int client;
    
        char buffer[200];
    
        int iDataNum;
    
        //socket函数,失败返回-1
        //int socket(int domain, int type, int protocol);
        //第一个参数表示使用的地址类型,一般都是ipv4,AF_INET
        //第二个参数表示套接字类型:tcp:面向连接的稳定数据传输SOCK_STREAM
        //第三个参数设置为0
        if ((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
            perror("socket");
            return 1;
        }
    
        bzero(&server_addr, sizeof(server_addr));
    
        //初始化服务器端的套接字,并用htons和htonl将端口和地址转成网络字节序
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(SERVER_PORT);
    
        //ip可是是本服务器的ip,也可以用宏INADDR_ANY代替,代表0.0.0.0,表明所有地址
        server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
        //对于bind,accept之类的函数,里面套接字参数都是需要强制转换成(struct sockaddr *)
        //bind三个参数:服务器端的套接字的文件描述符,
    
        if (bind(serverSocket, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
            perror("connect");
            return 1;
        }
    
        //设置服务器上的socket为监听状态
        if (listen(serverSocket, 5) < 0) {
            perror("listen");
            return 1;
    
        }
    
        while (1) {
    
            printf("监听端口: %d\n", SERVER_PORT);
    
            //调用accept函数后,会进入阻塞状态
            //accept返回一个套接字的文件描述符,这样服务器端便有两个套接字的文件描述符,
            //serverSocket和client。
            //serverSocket仍然继续在监听状态,client则负责接收和发送数据
            //clientAddr是一个传出参数,accept返回时,传出客户端的地址和端口号
            //addr_len是一个传入-传出参数,传入的是调用者提供的缓冲区的clientAddr的长度,以避免缓冲区溢出。
            //传出的是客户端地址结构体的实际长度。
            //出错返回-1
            client = accept(serverSocket, (struct sockaddr *) &clientAddr, (socklen_t *) &addr_len);
    
            if (client < 0) {
                perror("accept");
                continue;
    
            }
    
            printf("等待消息...\n");
            //inet_ntoa ip地址转换函数,将网络字节序IP转换为点分十进制IP
            //表达式:char *inet_ntoa (struct in_addr);
            printf("IP is %s\n", inet_ntoa(clientAddr.sin_addr));
            printf("Port is %d\n", htons(clientAddr.sin_port));
    
            while (1) {
                printf("读取消息:");
                buffer[0] = '\0';
                iDataNum = recv(client, buffer, 1024, 0);
                if (iDataNum < 0) {
                    perror("recv null");
                    continue;
                }
    
                buffer[iDataNum] = '\0';
                if (strcmp(buffer, "quit") == 0)
                    break;
                printf("%s\n", buffer);
                printf("发送消息:");
    
                scanf("%s", buffer);
                printf("\n");
                send(client, buffer, strlen(buffer), 0);
    
                if (strcmp(buffer, "quit") == 0)
                    break;
            }
    
        }
    
        close(serverSocket);
        return 0;
    }

    客户端:

    /*socket tcp客户端*/

    #include <sys/stat.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define SERVER_PORT 6666
    
    /*
    连接到服务器后,会不停循环,等待输入,
    输入quit后,断开与服务器的连接
    */
    
    int main() {
    
        //客户端只需要一个套接字文件描述符,用于和服务器通信
        int clientSocket;
    
        //描述服务器的socket
        struct sockaddr_in serverAddr;
        char sendbuf[200];
        char recvbuf[200];
        int iDataNum;
    
        if ((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
            perror("socket");
            return 1;
    
        }
    
        serverAddr.sin_family = AF_INET;
        serverAddr.sin_port = htons(SERVER_PORT);
    
        //指定服务器端的ip,本地测试:127.0.0.1
        //inet_addr()函数,将点分十进制IP转换成网络字节序IP
        serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
        if (connect(clientSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) {
    
            perror("connect");
    
            return 1;
    
        }
    
        printf("连接到主机...\n");
        while (true) {
            printf("发送消息:");
            scanf("%s", sendbuf);
            printf("\n");
            send(clientSocket, sendbuf, strlen(sendbuf), 0);
            if (strcmp(sendbuf, "quit") == 0)
                break;
    
            printf("读取消息:");
            recvbuf[0] = '\0';
            iDataNum = recv(clientSocket, recvbuf, 200, 0);
            recvbuf[iDataNum] = '\0';
            printf("%s\n", recvbuf);
    
        }
    
        close(clientSocket);
        return 0;
    
    }
    
    

     

    展开全文
  • 计算机网络——不同网段下的主机通信

    万次阅读 多人点赞 2020-06-20 08:20:22
    搞懂不同网段间的主机通信

    点赞后看,养成习惯
    喜欢的话 可以点个关注哟
    你们的点赞支持对博主们来说很重要哦 !!!

    我们以主机ping的过程举例,设定本地IP地址为192.168.8.104,目标IP地址为191.168.1.2

    在这里插入图片描述


    在这里插入图片描述


    不同网段主机通信工作流程

    不同主机通信的工作流程如下:

    1、判断不同网段

    192.168.8.104使用255.255.255.0的子网掩码去判断191.168.1.2,得出对方的网络号是191.168.1
    在这里插入图片描述
    自己的网络号是192.168.8,所以两者的网络号不同,属于不同网段的通信

    2、查找路由表

    网络号相同的主机,可以使用ARP广播来发现对方的MAC地址。但是网络号不同的主机则不能这样通信

    网络号不同的情况下,需要查找路由表,在路由表里来匹配192.168.1,一旦匹配到路由条目,则把IP包发给这条路由条目的下一台跳

    在这里插入图片描述
    如果路由表前几条都没有匹配到,那么就去最后一跳万能路由。 通俗地说,如果同学在外面漂泊四处碰壁,那么家就是最后的归宿。这个网段号0就是所有IP包最后没有成功匹配的归宿,而这个归宿就是缺省网关,也叫默认网关

    3、发现网关硬件接口MAC

    网关肯定是和本机属于同一网段,可以从ARP缓存中或者ARP广播获知网关的MAC

    4、Ping包发给网关192.168.8.1

    Ping包头部被封装以太网头部,其中有一个目的MAC地址,只要目的MAC填写成网关的MAC就好,那么这个Ping就会发送个网关192.168.8.1

    5、网关硬件接口接受以太网帧

    网关硬件接口接受到此以太网帧,发现帧的目的MAC是自己的MAC地址。就会接受存放在缓冲区,并通知IP层(进程)来取走。

    6、网关路由转发

    网关IP层从网卡复制来了IP包,接着要进行路由匹配查找。根据本地ARP缓存表或者ARP广播获知目的IP地址的MAC地址。然后将IP包添加以太网帧头,发送出去。

    7、Ping包被弹回

    191.168.1.2接受到Ping包,包的内容原封不动,依照第6步步骤将ping包回包发送回192.168.8.104

    8、Ping程序打印输出

    192.168.8.104依据Ping包、回应包的序列号一一对应起来,如何分别计算出RTT时间统计。

    一般都是4个Ping包,这样就会有RTT最大、最小、平均值,如果哪个序列号的Ping包在2s超时没有接收到回应包,则会认为Ping包丢失

    在这里插入图片描述





    以上文章,作为自己的学习笔记,仅供参考

    本文完,感谢你的阅读!!!

    最后,如果本文对你有所帮助,希望可以点个赞支持一下。你们的鼓励将会是博主原创的动力。
    在这里插入图片描述

    展开全文
  • 计算机网络协议——通信协议综述

    万次阅读 多人点赞 2019-09-03 23:20:58
    通信协议综述概述一、为什么学习网络协议1.1 常见的网络协议二、网络分层的真正含义2.1 为什么网络要分层?2.2 浏览点击请求过程2.3 揭秘层与层之间的关系三、ifconfig 命令行的由来3.1 ip地址3.2 无类型域间选路...
  • 三层设备主要负责寻址,通过查看自已通过各种动态路由协议或静态指定的路由表,来确定数据包的传送方向,路由器就像是站在十字路口的一个交警,如果有司机(数据包)不知道目的地就问这个交警,这个交警从大脑的...
  • 计算机网络实验之三层交换机实现VLAN间通信
  • PC1:192.168.5.5通过二层交换机连接到PC2:192.168.7.6,不改变硬件实现通信 第一种方法:子网掩码增大,192.168.5.5/22 192.168.7.6/22 实现通信 第二种方法:增加静态路由及回程路由 PC1配置: PC2配置: ...
  • 实验内容:使用 Socket 编程,采用其中的 TCP 面向连接方式,实现计算机数 据的交换。 具体要求: 1、操作系统:可在 Linux 或 Windows 操作系统下实现 2、编程语言:C 或 C++,若使用 Java、python 等更高级的语言...
  • 项目中需要实现PC与树莓派通信完成控制,寻找一遍后,发现现例子大多比较简单,可以实现一次收发过程,第二次数据发送就会出现问题。观察发现少一个循环,无法保持联通状态,代码修改后可以简单的实现半双工通信,...
  • 两台计算机实现通信的几种方式(转) 底部加线部分是比较容易理解和操作的部分(现在比较流行的局域网配置:网卡+双绞线+手动配置ip),以下只是转贴不知道是不是可行,没有试验过,如果哪位试验成功了,希望...
  •  使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。 man unix内容如下: NAME( 名称)  unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL ? ...
  • ROS实现两台计算机之间的网络通信

    千次阅读 2018-08-08 16:33:38
    3.实现通信 首先在两台电脑上安装chrony包,用于实现同步 sudo apt-get install chrony 之后再两台电脑上进行ssh的安装 sudo apt-get install openssh-server 安装完之后,确认服务器是否已经启动 ...
  • Packet Tracer 通过配置静态路由实现不同网段之间的通信(详细步骤) 一、目标:ping通四个网段 二、解决方法:配置静态路由 1.拓扑结构布线图如下所示: 注意:这里省略了为每台PC配置IP地址 和 相对应的默认网关...
  • 计算机网络】不同网段内主机如何通信

    千次阅读 多人点赞 2019-04-30 13:55:47
    这款软件最有价值的地方在于用户可以通过软件来模拟真实的网络,能够零成本搭建一套计算机网络。我们可以边学网络边用这个软件来进行仿真,验证所学知识。 下载链接:...
  • 利用三层交换机实现不同VLAN间通信

    千次阅读 2014-09-25 21:33:58
    通过三层交换机实现VLAN间通信 要求: 1、在二层交换机S2126上建立虚拟局域网vlan30;在三层交换机S3550-24上建立虚拟局域网vlan10 和vlan20;将每个交换机的不同端口分别加入各自的不同vlan; 2、将交换机S2126...
  • 用路由器实现不同vlan之间的通信

    千次阅读 2019-12-17 08:45:17
    一:用路由器实现不同vlan间的通信 1.1 拓扑图如下: (1)主机配置:PC-PT0和PC-PT1是vlan 100中的,PC-PT2和PC-PT3是vlan 200中的。 PC-PT0的IP地址为:用的是C类地址,IP Address:192.168.1.xx,其中...
  • socket翻译成中文就是“套接字”的意思,所谓的socket编程就是指用计算机语言通过编程来实现计算机之间的通信问题。socket通信技术就是两台联网或者多态联网的计算机之间的数据交互技术。 二、socket典型应用 ...
  • 本实验的主要目的是实现在交换机上进行VLAN的划分,同一VLAN中的网络用户可以相互通信。划分VLAN的方法使用基于端口的划分和基于MAC地址(网卡地址)的划分两种方法。 1.交换机是能够在源端口和目标端口间提供直接、...
  • 计算机理论/进程间通信

    千次阅读 2019-04-20 14:14:45
      进程间通信(IPC, Inter-Process Communication)是指在不同的进程之间,相互传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)消息队列、信号量、共享存储、socket、streams等… 通过以上所述,...
  • 计算机之间的通信原理

    千次阅读 2019-07-25 13:14:40
    一、前言 ...计算机之间通信,主要通过网络通信的5层模型。即 应用层(Application Layer) 传输层(Transport Layer) 网络层(Network Layer) 数据链路层(Datalink Layer) 物理层(Phys...
  • 序 ROS多机通信就是多个装有ROS的不同计算机之间共用同一个ROS主机(Master)实现节点与话题共享,本人经验建议当你遇到以下问题时候可以尝试使用多机通信解决:Case①: 一个team多个成员共同开发一个ROS项目,...
  • 网关,路由,局域网内的通信不同的网络间通信实现的原理剖析
  • 计算机传真中串行通信的研究与实现彭爱国 李建华 在现代社会中,传真传输已成为远程通信领域的主要工具之一,而随着计算机通信及网络技术的发展,传真传输不再只限于专用的传真机,事实上,利用计算机和传真调制...
  • 三层交换机如何实现不同网络的相互通信 前言 1.三层交换的原理 2.三层交换机和二层交换机的区别 3.三层交换的拓扑图及相关配置 4.三层交换机的优点 1.三层交换的原理 第三层交换是在网络交换机中引入路由模块而取代...
  • websocket是一种在单个TCP连接上进行全双工通信的协议。 websocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者...
  • 三层交换机实现不同vlan间通信

    万次阅读 2018-10-31 20:19:13
    1.器材 二层交换机为神州数码DCS-3950,路由交换机为神州数码DCRS-5650,路由器为神州数码...使用带内管理可以通过交换机的以太网端口对设备进行远程管理配置,目前使用的网络管理手段基本上都是带内管理。在带外...
  • 利用三层交换机实现不同vlan间通信

    千次阅读 2014-07-31 19:28:15
    使在同一VLAN里的计算机系统能跨交换机进行通信,而在不同VLAN里的计算机系统也能进行相互通信。 【实现步骤】 步骤1.在交换机SwitchA上创建vlan 10 ,并将0/5端口划分到vlan 10 中. SwitchA>enable ...
  • 计算机网络体系结构通信原理

    千次阅读 2018-12-07 23:19:06
    对等实体之间借用下层服务,并遵守相关规则以实现信息交换。
  • 计算机网络通信概述题库

    万次阅读 多人点赞 2018-07-30 23:17:19
    1、以下对单工通信说明正确的是: A、 允许在两个方向上同时传输 B、 任何时候只允许在一个方向上传输C、 任何时候只允许按照一个方向传输 D、 允许双方交替地向对方传输信息2、考虑语音信道带宽为1000赫兹,信噪比...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 351,229
精华内容 140,491
关键字:

不同计算机通过什么实现通信