网络编程概述和IP地址的获取方法

java网络通信概述

一、网络通信步骤:

  主机1   主机2

QQ-------QQ

FEIQ-----FEIQ

  1.找到对方IP。

  2.找到对方端口号。数据要发送到对方的应用程序上。为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。   为了方便称呼这个数字,叫做端口。注意此处是逻辑端口。

  3.定义通信规则。这个通讯规则称为协议。 国际组织定义了通用的协议TCP/IP。

二、备注说明:

  为了安全起见,一些单位,特别是保密工作,用的协议和大家用的协议都不一样,那么别人想入侵他根本入侵不了,除非破解协议。

  127.0.0.1本地回环地址。也就是说如果本机没有配置任何地址时候默认地址。 用途之一:测试网卡。ping 127.0.0.1

  192端,保留地址段。用于局域网。

三、端口范围

  端口 0--65535  

  一般来说:0--1024 系统程序保留,一般开发程序不用,防止冲突。

   常见端口:web-80;tomcat-8080;mysql:3306。

四、通讯规则:UDP、TCP

五、网络模型:

  不同功能层次比较细致的划分。

  OSI参考模型:物理层、数据链路层、网络层、会话层、表示层、应用层。

  数据封包(发送者)————>数据拆包(接收者)应用层看数据属于哪个端口,然后数据解析。

  TCP/IP参考模型:应用层(http)、传输层(TCP/UDP)、网际层(IP)、主机至网络层。

  java基础基本都是在传输层和网际层操作的,暂且不考虑应用层。 IP:网络中的设备标识--不易记忆,可用主机名--本地回环地址:127.0.0.1 主机名:localhost

六、java方法获取本机和网络上主机的IP地址

1.首先导入net包
2.生成IP地址对象
3.解析IP地址对象,分为地址和主机名。一般网络上主机名不一定能解析出来。 

 1 import java.net.*;
 2 
 3 class  IPDemo
 4 {
 5     public static void main(String[] args) throws Exception //异常必须处理或者抛出
 6     {
 7         InetAddress i=InetAddress.getLocalHost(); //获取本机IP地址对象
 8         System.out.println(i.toString());//打印本机IP地址对象,转换成字符创打印
 9 
10         System.out.println("Address:"+i.getHostAddress());//获取本机IP地址
11         System.out.println("name:"+i.getHostName());//获取本机IP地址名称
12 
13         //获取任意一台主机IP地址对象,如果这个地址和他对应的主机名没有在网络上
14         //我这个主机照这个地址没找到,没解析成功。IP地址对象的名称仍然是IP地址。
15         InetAddress ia=InetAddress.getByName("192.168.1.254");
16         //InetAddress ia=InetAddress.getByName("cxxy.seu.edu.cn");
17         //InetAddress ia=InetAddress.getByName("www.baidu.com");//只适合单一地址
18         //若返回的IP地址对象不唯一。那么往里面传主机名,返回的是IP地址对象数组,方法:static InetAddress[] getAllByName(String host)
19         System.out.println("Address:"+ia.getHostAddress());//获取本机IP地址
20         System.out.println("name:"+ia.getHostName());//获取本机IP地址名称    
21     
22     }
class IPDemo

 七、用java获取本机IP对象的四种方法

  本机IP对象对于在网络通信中十分重要。

InetAddress addr=InetAddress.getLocalHost();
InetAddress addr = InetAddress.getByName(null);
InetAddress.getByName("localhost");
InetAddress.getByName("127.0.0.1");
补充一种查看IP地址对象方法:
运行-->cmd-->ipconfig;里面有地址类型,子网掩码,默认网关,IP地址等信息。
如果是查看MAC的IP地址,可以按楼上的方法,cmd中输入“ipconfig/all”命令,Physical Address 物理地址,就是本机IP啦

转载于:https://www.cnblogs.com/xiangyangzhu/p/net_IpDemo.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言网络编程中,可以通过发送ARP请求来获取给定IP地址的MAC地址。下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <net/if_arp.h> #include <net/if.h> #include <sys/ioctl.h> int main() { // 目标IP地址 char* targetIP = "192.168.1.1"; // 创建套接字 int sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); } // 获取接口索引 struct ifreq ifr; strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); if (ioctl(sockfd, SIOCGIFINDEX, &ifr) == -1) { perror("ioctl failed"); close(sockfd); exit(EXIT_FAILURE); } int ifindex = ifr.ifr_ifindex; // 构造ARP请求 struct arpreq arpReq; memset(&arpReq, 0, sizeof(arpReq)); struct sockaddr_in* sin = (struct sockaddr_in*)&arpReq.arp_pa; sin->sin_family = AF_INET; sin->sin_addr.s_addr = inet_addr(targetIP); arpReq.arp_ha.sa_family = ARPHRD_ETHER; arpReq.arp_flags = ATF_COM; // 发送ARP请求 if (ioctl(sockfd, SIOCGARP, &arpReq) == -1) { perror("ioctl failed"); close(sockfd); exit(EXIT_FAILURE); } // 获取MAC地址 unsigned char* macAddress = (unsigned char*)arpReq.arp_ha.sa_data; printf("MAC address of %s: %02X:%02X:%02X:%02X:%02X:%02X\n", targetIP, macAddress[0], macAddress[1], macAddress[2], macAddress[3], macAddress[4], macAddress[5]); // 关闭套接字 close(sockfd); return 0; } ``` 注意,上述示例代码中使用了Linux系统特定的网络API和数据结构。在其他操作系统下,可能需要使用不同的接口来实现相同的功能。此外,需要注意以管理员权限运行程序才能成功获取MAC地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值