精华内容
下载资源
问答
  • linux下C语言实现静态IP地址,网关的设置
    #include <sys/ioctl.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <net/if.h>
    #include <error.h>
    #include <net/route.h>
    
    int SetIfAddr(char *ifname, char *Ipaddr, char *mask,char *gateway)
    {
        int fd;
        int rc;
        struct ifreq ifr; 
        struct sockaddr_in *sin;
        struct rtentry  rt;
    
        fd = socket(AF_INET, SOCK_DGRAM, 0);
        if(fd < 0)
        {
                perror("socket   error");     
                return -1;     
        }
        memset(&ifr,0,sizeof(ifr)); 
        strcpy(ifr.ifr_name,ifname); 
        sin = (struct sockaddr_in*)&ifr.ifr_addr;     
        sin->sin_family = AF_INET;     
        //IP地址
        if(inet_aton(Ipaddr,&(sin->sin_addr)) < 0)   
        {     
            perror("inet_aton   error");     
            return -2;     
        }    
    
        if(ioctl(fd,SIOCSIFADDR,&ifr) < 0)   
        {     
            perror("ioctl   SIOCSIFADDR   error");     
            return -3;     
        }
        //子网掩码
        if(inet_aton(mask,&(sin->sin_addr)) < 0)   
        {     
            perror("inet_pton   error");     
            return -4;     
        }    
        if(ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)
        {
            perror("ioctl");
            return -5;
        }
        //网关
        memset(&rt, 0, sizeof(struct rtentry));
        memset(sin, 0, sizeof(struct sockaddr_in));
        sin->sin_family = AF_INET;
        sin->sin_port = 0;
        if(inet_aton(gateway, &sin->sin_addr)<0)
        {
           printf ( "inet_aton error\n" );
        }
        memcpy ( &rt.rt_gateway, sin, sizeof(struct sockaddr_in));
        ((struct sockaddr_in *)&rt.rt_dst)->sin_family=AF_INET;
        ((struct sockaddr_in *)&rt.rt_genmask)->sin_family=AF_INET;
        rt.rt_flags = RTF_GATEWAY;
        if (ioctl(fd, SIOCADDRT, &rt)<0)
        {
            zError( "ioctl(SIOCADDRT) error in set_default_route\n");
            close(fd);
            return -1;
        }
        close(fd);
        return rc;
    }

    展开全文
  • int SetIfAddr(char *ifname, char *Ipaddr, char *mask,char *gateway) {  int fd;  int rc;  struct ifreq ifr;  struct sockaddr_in *sin;  struct rtentry rt;    fd = socket(AF_INET, SOCK_DGRAM, 0)...
    #include <sys/ioctl.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <net/if.h>
    #include <error.h>
    #include <net/route.h>
     
    int SetIfAddr(char *ifname, char *Ipaddr, char *mask,char *gateway)
    {
        int fd;
        int rc;
        struct ifreq ifr;
        struct sockaddr_in *sin;
        struct rtentry  rt;
       
        fd = socket(AF_INET, SOCK_DGRAM, 0);
        if(fd < 0)
        {
                perror("socket   error");    
                return -1;    
        }
        memset(&ifr,0,sizeof(ifr));
        strcpy(ifr.ifr_name,ifname);
        sin = (struct sockaddr_in*)&ifr.ifr_addr;    
        sin->sin_family = AF_INET;  
      
        //ipaddr
        if(inet_aton(Ipaddr,&(sin->sin_addr)) < 0)  
        {    
            perror("inet_aton   error");    
            return -2;    
        }   
       
        if(ioctl(fd,SIOCSIFADDR,&ifr) < 0)  
        {    
            perror("ioctl   SIOCSIFADDR   error");    
            return -3;    
        }

        //netmask
        if(inet_aton(mask,&(sin->sin_addr)) < 0)  
        {    
            perror("inet_pton   error");    
            return -4;    
        }   
        if(ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)
        {
            perror("ioctl");
            return -5;
        }

        //gateway
        memset(&rt, 0, sizeof(struct rtentry));
        memset(sin, 0, sizeof(struct sockaddr_in));
        sin->sin_family = AF_INET;
        sin->sin_port = 0;
        if(inet_aton(gateway, &sin->sin_addr)<0)
        {
           printf ( "inet_aton error\n" );
        }
        memcpy ( &rt.rt_gateway, sin, sizeof(struct sockaddr_in));
        ((struct sockaddr_in *)&rt.rt_dst)->sin_family=AF_INET;
        ((struct sockaddr_in *)&rt.rt_genmask)->sin_family=AF_INET;
        rt.rt_flags = RTF_GATEWAY;
        if (ioctl(fd, SIOCADDRT, &rt)<0)
        {
            zError( "ioctl(SIOCADDRT) error in set_default_route\n");
            close(fd);
            return -1;
        }
        close(fd);
        return rc;

    }

    转载于:https://www.cnblogs.com/tdyizhen1314/p/4896682.html

    展开全文
  •  程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的。  移植时服务端可以不用更改,编译后可直接运行;客户端将ip改为...
  • 在ARM平台上做嵌入式开发,发现通过其他系统系统调用去修改IP地址之后,设备会死机。于是采用修改/etc/network/interfaces之后重启的方式修改IP。 代码如下: #include #include #include #include #include #...

    在ARM平台上做嵌入式开发,发现通过其他系统系统调用去修改IP地址之后,设备会死机。于是采用修改/etc/network/interfaces之后重启的方式修改IP。

    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/ioctl.h>
    #include<sys/socket.h>
    #include<arpa/inet.h>
    #include<netinet/in.h>
    #include<net/if.h>
    
    //设置IP
    void setip(char *buffer)
    {
    	char * FILE_NAME = "/etc/network/interfaces";
    	FILE * file_fd;
    	int len = 0;
    	file_fd = fopen(FILE_NAME,"r+");
    	if(file_fd == NULL)
    	{
    		perror("errno");
    	}
    	//跳过开头的116个字节
    	fseek(file_fd,116,SEEK_CUR);
    	fwrite(buffer,strlen(buffer),1,file_fd);
        fclose(file_fd);
    }
    
    
    //获取IP
    void getip(char *buffer)
    {
    	char * FILE_NAME = "/etc/network/interfaces";
    	FILE * file_fd;
    	int len = 0;
    	file_fd = fopen(FILE_NAME,"rb");
    	if(file_fd == NULL)
    	{
    		perror("errno");
    	}
    	//跳过开头的116个字节
    	fseek(file_fd,116,SEEK_CUR);
    	len = fread(buffer, 1, 13, file_fd);
    	if(len == -1)
    	{
    		printf("File read error!\n");
    		perror("errno");
    	}
        fclose(file_fd);
    }
    
    
    int main(int argc, char * argv[])
    {
    	char ipbuffer[20]="192.168.1.112";
    	setip(ipbuffer);
    	getip(ipbuffer);
    	printf("ipbuffer is:%s\n",ipbuffer);
    	system("reboot");
    	printf("rebooting!!!\n");
    
    	return 0;
    }


    展开全文
  • 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行...程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的。 移植时

    转载于http://blog.csdn.net/kikilizhm/article/details/7858405


          这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端;客户端在接受到数据后打印出来,然后关闭。程序里有详细的说明,其中对具体的结构体和函数的实现可以参考其他资料。

    程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的。

    移植时服务端可以不用更改,编译后可直接运行;客户端将ip改为服务器的地址,然后编译运行。可以使用netstat 进行查看相应的运行状态。


    1. /************************************* 
    2. 文件名: server.c  
    3. linux 下socket网络编程简例  - 服务端程序 
    4. 服务器端口设为 0x8888   (端口和地址可根据实际情况更改,或者使用参数传入) 
    5. 服务器地址设为 192.168.1.104 
    6. */  
    7.   
    8. #include <stdlib.h>  
    9. #include <sys/types.h>  
    10. #include <stdio.h>  
    11. #include <sys/socket.h>  
    12. #include <linux/in.h>  
    13. #include <string.h>  
    14.   
    15. int main()  
    16. {  
    17. int sfp,nfp; /* 定义两个描述符 */  
    18. struct sockaddr_in s_add,c_add;  
    19. int sin_size;  
    20. unsigned short portnum=0x8888; /* 服务端使用端口 */  
    21.   
    22. printf("Hello,welcome to my server !\r\n");  
    23. sfp = socket(AF_INET, SOCK_STREAM, 0);  
    24. if(-1 == sfp)  
    25. {  
    26.     printf("socket fail ! \r\n");  
    27.     return -1;  
    28. }  
    29. printf("socket ok !\r\n");  
    30.   
    31. /* 填充服务器端口地址信息,以便下面使用此地址和端口监听 */  
    32. bzero(&s_add,sizeof(struct sockaddr_in));  
    33. s_add.sin_family=AF_INET;  
    34. s_add.sin_addr.s_addr=htonl(INADDR_ANY); /* 这里地址使用全0,即所有 */  
    35. s_add.sin_port=htons(portnum);  
    36. /* 使用bind进行绑定端口 */  
    37. if(-1 == bind(sfp,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))  
    38. {  
    39.     printf("bind fail !\r\n");  
    40.     return -1;  
    41. }  
    42. printf("bind ok !\r\n");  
    43. /* 开始监听相应的端口 */  
    44. if(-1 == listen(sfp,5))  
    45. {  
    46.     printf("listen fail !\r\n");  
    47.     return -1;  
    48. }  
    49. printf("listen ok\r\n");  
    50.   
    51. while(1)  
    52. {  
    53. sin_size = sizeof(struct sockaddr_in);  
    54. /* accept服务端使用函数,调用时即进入阻塞状态,等待用户进行连接,在没有客户端进行连接时,程序停止在此处, 
    55.    不会看到后面的打印,当有客户端进行连接时,程序马上执行一次,然后再次循环到此处继续等待。 
    56.    此处accept的第二个参数用于获取客户端的端口和地址信息。 
    57.     */  
    58. nfp = accept(sfp, (struct sockaddr *)(&c_add), &sin_size);  
    59. if(-1 == nfp)  
    60. {  
    61.     printf("accept fail !\r\n");  
    62.     return -1;  
    63. }  
    64. printf("accept ok!\r\nServer start get connect from %#x : %#x\r\n",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));  
    65.   
    66. /* 这里使用write向客户端发送信息,也可以尝试使用其他函数实现 */  
    67. if(-1 == write(nfp,"hello,welcome to my server \r\n",32))  
    68. {  
    69.     printf("write fail!\r\n");  
    70.     return -1;  
    71. }  
    72. printf("write ok!\r\n");  
    73. close(nfp);  
    74.   
    75. }  
    76. close(sfp);  
    77. return 0;  
    78. }  



    1. /************************************* 
    2. 文件名: client.c  
    3. linux 下socket网络编程简例  - 客户端程序 
    4. 服务器端口设为 0x8888   (端口和地址可根据实际情况更改,或者使用参数传入) 
    5. 服务器地址设为 192.168.1.104 
    6. 作者:kikilizhm#163.com (将#换为@) 
    7. */  
    8.   
    9. #include <stdlib.h>  
    10. #include <sys/types.h>  
    11. #include <stdio.h>  
    12. #include <sys/socket.h>  
    13. #include <linux/in.h>  
    14. #include <string.h>  
    15.   
    16. int main()  
    17. {  
    18. int cfd; /* 文件描述符 */  
    19. int recbytes;  
    20. int sin_size;  
    21. char buffer[1024]={0};    /* 接受缓冲区 */  
    22. struct sockaddr_in s_add,c_add; /* 存储服务端和本端的ip、端口等信息结构体 */  
    23. unsigned short portnum=0x8888;  /* 服务端使用的通信端口,可以更改,需和服务端相同 */  
    24.   
    25. printf("Hello,welcome to client !\r\n");  
    26. /* 建立socket 使用因特网,TCP流传输 */  
    27. cfd = socket(AF_INET, SOCK_STREAM, 0);  
    28. if(-1 == cfd)  
    29. {  
    30.     printf("socket fail ! \r\n");  
    31.     return -1;  
    32. }  
    33. printf("socket ok !\r\n");  
    34. /* 构造服务器端的ip和端口信息,具体结构体可以查资料 */  
    35. bzero(&s_add,sizeof(struct sockaddr_in));  
    36. s_add.sin_family=AF_INET;  
    37. s_add.sin_addr.s_addr= inet_addr("192.168.1.104"); /* ip转换为4字节整形,使用时需要根据服务端ip进行更改 */  
    38. s_add.sin_port=htons(portnum); /* 这里htons是将short型数据字节序由主机型转换为网络型,其实就是 
    39.     将2字节数据的前后两个字节倒换,和对应的ntohs效果、实质相同,只不过名字不同。htonl和ntohl是 
    40.     操作的4字节整形。将0x12345678变为0x78563412,名字不同,内容两两相同,一般情况下网络为大端, 
    41.     PPC的cpu为大端,x86的cpu为小端,arm的可以配置大小端,需要保证接收时字节序正确。 
    42.  */  
    43.   
    44. printf("s_addr = %#x ,port : %#x\r\n",s_add.sin_addr.s_addr,s_add.sin_port); /* 这里打印出的是小端 
    45.     和我们平时看到的是相反的。 */  
    46.   
    47. /* 客户端连接服务器,参数依次为socket文件描述符,地址信息,地址结构大小 */  
    48. if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))  
    49. {  
    50.     printf("connect fail !\r\n");  
    51.     return -1;  
    52. }  
    53. printf("connect ok !\r\n");  
    54. /*连接成功,从服务端接收字符*/  
    55. if(-1 == (recbytes = read(cfd,buffer,1024)))  
    56. {  
    57.     printf("read data fail !\r\n");  
    58.     return -1;  
    59. }  
    60. printf("read ok\r\nREC:\r\n");  
    61.   
    62. buffer[recbytes]='\0';  
    63. printf("%s\r\n",buffer);  
    64.   
    65. getchar(); /* 此句为使程序暂停在此处,可以使用netstat查看当前的连接 */  
    66. close(cfd); /* 关闭连接,本次通信完成 */  
    67. return 0;  
    68.   
    69.   
    70.   
    71. }  


    运行截图:



    展开全文
  • 这里给出在Linux下的简单socket网络编程的实例,使用tcp...程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的。 移植时服务端可
  • 原创文章,转载请注明转载字样和出处,谢谢! 这里给出在Linux下的简单socket网络编程的实例,使用tcp协议进行通信...程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写...
  • 这里给出在linux下的简单的socket网络编程实例,使用tcp协议进行通信,服务端进行监听,...程序说明:这里的server的port和ip地址使用固定的设置,移植时能够依据详细情况更改,能够改写参数传递更好,这里为了更方...
  • 一、linux下C语言实现静态IP地址,子网掩码,网关的设置  #include #include #include #include #include #include #include #include   int SetIfAddr(char *ifname, char *Ipaddr, char *mask,char *...
  • 绑定ip地址、端口等信息到socket上,用函数bind(); 开启监听,用函数listen(); 接收客户端上来的连接,用函数accept(); 收发数据,用函数send()和recv(),或者read()和write();

空空如也

空空如也

1 2 3 4 5
收藏数 86
精华内容 34
关键字:

linux下c语言设置ip地址

linux 订阅
c语言 订阅