在linux下,怎么使用C语言编写程序自动修改网络参数?谢谢~!

在linux下,怎么使用C语言编写程序自动修改网络参数?谢谢~!,第1张

你可以调用 系统 system函数,在程序里执行shell,如果想永久生效网路配置,示例如下 system("echo DEVICE=eth0 >/etc/sysconfig/network-scripts/ifcfg-eth0")

system("echo ONBOOT=yes >>/etc/sysconfig/network-scripts/ifcfg-eth0")

system("echo BOOTPROTO=static >>/etc/sysconfig/network-scripts/ifcfg-eth0")

system("echo IPADDR=192.168.10.10 >>/etc/sysconfig/network-scripts/ifcfg-eth0")

system("echo NETMASK=255.255.255.0 >>/etc/sysconfig/network-scripts/ifcfg-eth0")system("/sbin/service network restart")

exit(0)忘了说了,记得包含stdlib.h这个头文件

------------------

你学习C语言的网络编程,我建议你到LINUX下去学

给你一个例子程序是一个局域网聊天服务器

------------------

#define SAY_HELLO 0 /*发送欢迎信息*/

#define SEND_MESSAGE 1 /*转发聊天信息*/

#define CHANGE_NAME 2 /*更改用户名*/

#define REFLESH_LIST 3 /*刷新用户名列表*/

#define CLIENT_LEFT4 /*客户端离开*/

#define CLIENT_COME 5 /*客户加入*/

#define SEND_RECV_FILE 6 /*发送接收文件*/

#define END_OF_FILE 7 /*文件发送结束标记*/

#define FILE_BLOCK 1024/*读取文件的块大小*/

#define MAX_CHATER 100 /*服务器最大同时容纳人数*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <errno.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <sys/wait.h>

#include <netdb.h>

#include <fcntl.h>

#include <bits/time.h>

/*服务端发送欢迎信息*/

struct Message0{

int Func_number /*功能号: 此处取0 SAY_HELLO

1------表示转发信息

2------表示转发更名通知

3------表示传送当前用户列表

4------表示客户端离开

5------表示客户加入

6------表示发送和接收文件

*/

char msg[50] /* 欢迎信息 */

char username[50] /* 服务器端生成的用户名称 */

}

/*服务器端与客户端信息转发数据结构*/

struct Message1{

int Func_number /*功能号: 此处取1 SEND_MESSAGE

1------表示转发信息

2------表示转发更名通知

3------表示传送当前用户列表

4------表示客户端离开

5------表示客户加入

6------表示发送和接收文件

*/

char msg[201] /* 转发的信息 */

char send_user_name [50]/* 发送数据的用户呢称 */

char recv_user_name [50]/* 接收数据的用户名称 */

}

/*服务器端转发更名通知*/

struct Message2{

int Func_number /*功能号: 此处取2 CHANGE_NAME

1------表示转发信息

2------表示转发更名通知

3------表示传送当前用户列表

4------表示客户端离开

5------表示客户加入

6------表示发送和接收文件

*/

char oldname[50] /* 转发更名通知信息 */

char newname[50]

}

/*服务器保存当前所有用户列表的数据结构*/

struct User{

char user_name[50] /* 用户呢称 */

char user_address[15] /* 该用户IP地址 */

}

/*服务器转发在线用户列表*/

struct Message3{

int Func_number /*功能号: 此处取3 REFLESH_LIST

1------表示转发信息

2------表示转发更名通知

3------表示传送当前用户列表

4------表示客户端离开

5------表示客户加入

6------表示发送和接收文件

*/

int current_number/* 当前在线人数*/

struct User user_list[MAX_CHATER]

/* 服务端维护的用户列表 */

}

/*客户端发出的离开信息*/

struct Message4{

int Func_number /*功能号: 此处取4 CLIENT_LEFT

1------表示转发信息

2------表示转发更名通知

3------表示传送当前用户列表

4------表示客户端离开

5------表示客户加入

6------表示发送和接收文件

*/

char client_name[50] /* 离开的客户端名称*/

}

/*新客户登录提示*/

struct Message5{

int Func_number /*功能号: 此处取5 CLIENT_COME

1------表示转发信息

2------表示转发更名通知

3------表示传送当前用户列表

4------表示客户端离开

5------表示客户加入

6------表示发送和接收文件

*/

char username[50] /*新客户名称*/

}

/*读取文件块大小*/

struct datablock{

unsigned char block[FILE_BLOCK]/*读取文件的块大小*/

}

/*发送接收文件的数据结构*/

struct Message6{

int Func_number /*功能号: 此处取6 SEND_RECV_FILE

1------表示转发信息

2------表示转发更名通知

3------表示传送当前用户列表

4------表示客户端离开

5------表示客户加入

6------表示发送和接收文件

*/

struct datablock msg /*文件数据块*/

char file_name[512] /*文件名*/

int end_flag /*文件结束标记

0------包含有文件信息

1------表示请求发送文件,要求建立连接

2------表示请求成功(对方同意接收文件)

3------表示请求不成功(对方不同意接收文件)

7------(END_OF_FILE)表示文件传送完成

*/

char send_user_name [50]/* 发送数据的用户呢称 */

char recv_user_name [50]/* 接收数据的用户名称 */

}

/*

* Netchat 1.0 Server

*/

#include "head.h"

int main(int argc,char ** argv)

{

int listen_fd /*define var for listen*/

int accept_fd[MAX_CHATER] /*define fd for accept*/

int port_number /*define port number*/

int total_connect_number /*define var save total number*/

int i,sockaddr_in_size/*define var for help run*/

struct sockaddr_in server_addr /*define server addr*/

struct sockaddr_in client_addr /*define client addr*/

struct Message3 allusers /*define var to save user list*/

struct Message0 wellcome /*define hello message*/

struct timeval wait_time /*define time*/

pid_t pid

fd_set read_fdset /*define var for select*/

int max_fd /*define var to save max fd*/

sockaddr_in_size=sizeof(struct sockaddr_in)

pid=-1

/*init user list*/

memset(&allusers,0x0,sizeof(allusers))

allusers.Func_number=REFLESH_LIST

memset(&wellcome,0x0,sizeof(wellcome))

wellcome.Func_number=SAY_HELLO

/*send hello message*/

sprintf(wellcome.msg,"%s","Hello Wellcome to NETCHAT 1.0")

/*init time*/

wait_time.tv_sec=1

wait_time.tv_usec=0

/*check main arg*/

if(argc!=2)

{

fprintf(stderr,"\n[Error]\tWrong format,usage : %s [portnumber] to start server.\n",argv[0])

exit(1)

}

if((port_number=atoi(argv[1]))<0)

{

fprintf(stderr,"\n[Error]\tWrong port number, the portnumber must bigger than zero."

"(suggest bigger than 5000)\n")

exit(1)

}

/*run server socket*/

if( (listen_fd=socket(AF_INET,SOCK_STREAM,0))==-1 )

{

fprintf(stderr,"\n[Error]\tSocket error:%s\n",strerror(errno))

exit(1)

}

/*fill server address*/

bzero(&server_addr,sizeof(struct sockaddr_in))

server_addr.sin_family=AF_INET

server_addr.sin_port=htons(port_number)

server_addr.sin_addr.s_addr=htonl(INADDR_ANY)

/*bind socket to listen_fd*/

if(bind(listen_fd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr_in))==-1)

{

fprintf(stderr,"\n[Error]\tBind error:%s\n",strerror(errno))

exit(1)

}

/*listen...*/

listen(listen_fd,MAX_CHATER)

fprintf(stderr,"\n-->The server had started successfully<--")

/*init accept_fd*/

memset(accept_fd,-1,MAX_CHATER)

max_fd=-1

total_connect_number=0

/*init userlist the total number*/

allusers.current_number=total_connect_number

/*set listen_fd nonblock*/

fcntl(listen_fd,F_SETFL,O_NONBLOCK)

while(1)

{

int i

char tmp_command[128]

fflush(stdout)

/*re-set read_fdset*/

FD_ZERO(&read_fdset)

/*add listen_fd to the read_fdset*/

FD_SET(listen_fd,&read_fdset)

if(listen_fd>max_fd)

max_fd=listen_fd

/*add keybord input to read_fdset*/

FD_SET(0,&read_fdset)

/* readd all acceptfd to fdsett*/

for(i=0i<total_connect_numberi++)

{

FD_SET(accept_fd[i],&read_fdset)

if(accept_fd[i]>max_fd)

max_fd=accept_fd[i]

}

/* wait_time.tv_sec=1

wait_time.tv_usec=0

*/

fprintf(stderr,"\n(Type \"exit\" and ENTER to exit)Enter command ->")

fflush(stdout)

/*do select*/

/* select(max_fd+1,&read_fdset,NULL,NULL,&wait_time)*/

select(max_fd+1,&read_fdset,NULL,NULL,NULL)

if(FD_ISSET(0,&read_fdset))

{

char tmp_char

int k=0

tmp_char=getchar()

while(tmp_char!='\n')

{

tmp_command[k]=tmp_char

k++

tmp_char=getchar()

}

}

if(strcmp(tmp_command,"exit")==0)

goto exit_come

if(FD_ISSET(listen_fd,&read_fdset))

{

/*accept a new connect*/

accept_fd[total_connect_number]=accept(listen_fd,

(struct sockaddr *)(&client_addr),&sockaddr_in_size)

/*add the new user to read_fdset*/

if(accept_fd[total_connect_number]!=-1)

{

int k

time_t timep /*define the second tmp*/

struct Message5 new_user

memset(&new_user,0,sizeof(new_user))

new_user.Func_number=CLIENT_COME

time(&timep)

/*become the username*/

sprintf(wellcome.username,"%s%d","chater",timep%10000)

strcpy(new_user.username,wellcome.username)

fprintf(stderr,"\n[TIP]\tA user connected")

send(accept_fd[total_connect_number],&wellcome,sizeof(wellcome),0)

for(k=0k<total_connect_numberk++)

{

/*send wellcome message*/

send(accept_fd[k],&new_user,sizeof(new_user),0)

}

/*add the new connect fd to read_fdset*/

FD_SET(accept_fd[total_connect_number],&read_fdset)

/*re-value the max_fd*/

if(accept_fd[total_connect_number]>max_fd)

{

max_fd=accept_fd[total_connect_number]

}

sprintf( allusers.user_list[total_connect_number].user_name,

"%s",wellcome.username)

sprintf( allusers.user_list[total_connect_number].user_address,

"%s",inet_ntoa(client_addr.sin_addr) )

/*compute the new total number*/

allusers.current_number++

total_connect_number++

/*re-init the client address*/

memset(&client_addr,0x0,sizeof(client_addr))

}/*add accept_fd to fd_set end*/

continue

}/*test new user come end*/

/*test is there are any message come*/

for(i=0i<total_connect_numberi++)

{

/*if the message come*/

if(FD_ISSET(accept_fd[i],&read_fdset))

{

/*define var to receive the function number*/

int get_Func_number

/*peek the function number*/

if(recv(accept_fd[i],&get_Func_number,sizeof(int),MSG_PEEK)

==-1)

{

fprintf(stderr,"\n[Error]\tReceive Function number "

"error:%s",strerror(errno))

get_Func_number=-1

continue

}

/*error happened ,exit*/

if(get_Func_number<=0)

{

fprintf(stderr,"The Function number is bad:%d\n",get_Func_number)

goto exit_come

}

/*do by functin number*/

switch(get_Func_number)

{

/*transmit message to others*/

case 1:

{

/*define transmit var*/

struct Message1 get_message

int j

fprintf(stderr,"\n[TIP]\tThe get_Funcnumber is:%d",

get_Func_number)

/*receive message*/

if(recv(accept_fd[i],&get_message,

sizeof(get_message),0)==-1)

{

fprintf(stderr,

"\n[Error]\tReceive error:%s",

strerror(errno))

break

}

/*do transmit*/

for(j=0j<total_connect_numberj++)

{

send(accept_fd[j],&get_message,sizeof(get_message),0)

}

fprintf(stderr,"\n[TIP]\tTransmit1 (transmit message) message ok.")

break

}

/*change name*/

case 2:

{

/*define var for change name*/

struct Message2 get_message

int j

memset(&get_message,0,sizeof(get_message))

fprintf(stderr,"\n[TIP]\tThe get_Funcnumber is:%d",get_Func_number)

/*receive change name message*/

if(recv(accept_fd[i],&get_message,sizeof(get_message),0)==-1)

{

fprintf(stderr,"\n[Error]\tReceive error:%s",strerror(errno))

break

}

/*test name*/

for(j=0j<total_connect_numberj++)

{

if(strcmp(allusers.user_list[j].user_name,get_message.newname)==0)

{

fprintf(stderr,"\n[Error]\tThe name had exist")

memset(get_message.newname,0,sizeof(get_message.newname))

strcpy(get_message.newname,"Error")

send(accept_fd[i],&get_message,sizeof(get_message),0)

fprintf(stderr,"\n[Error]\tChange name error")

goto exit_case_come

}

}

/*change user list*/

for(j=0j<total_connect_numberj++)

{

if(strcmp(allusers.user_list[j].user_name,get_message.oldname)==0)

{

memset(allusers.user_list[j].user_name,0,

sizeof(allusers.user_list[j].user_name))

strcpy(allusers.user_list[j].user_name,get_message.newname)

}

}

for(j=0j<total_connect_numberj++)

{

send(accept_fd[j],&get_message,sizeof(get_message),0)

}

fprintf(stderr,"\n[TIP]\tTransmit2 (change name) message ok.")

break

}

case 3:

/*transmit user list*/

{

/*define int var for receive function number*/

int get_message

fprintf(stderr,"\n[TIP]\tThe get_Funcnumber is:%d",

get_Func_number)

/*receive message*/

if(recv(accept_fd[i],&get_message,

sizeof(int),0)==-1)

{

fprintf(stderr,

"\n[Error]\tReceive error:%s",

strerror(errno))

break

}

fprintf(stderr,"\n[TIP]\tTotal user number is:%d",allusers.current_number)

/*do send user list*/

if(send(accept_fd[i],&allusers,sizeof(allusers),0) == -1)

{

fprintf(stderr,

"\n[Error]\tTransmit3 message error.")

break

}

else

{

fprintf(stderr,

"\n[TIP]\tTransmit3 (send user list) "

"message ok.")

}

break

}

/*transmit user left message*/

case 4:

{

/*define var for do*/

struct Message4 get_message

int j,k

fprintf(stderr,"\n[TIP]\tThe get_Funcnumber is:%d",get_Func_number)

/*receive message*/

if(recv(accept_fd[i],&get_message,sizeof(get_message),0)==-1)

{

fprintf(stderr,"\n[Error]\tReceive error:%s",strerror(errno))

break

}

/*delete user from accept_fd[] and userlist[]*/

for(j=0j<total_connect_numberj++)

{

if(strcmp(allusers.user_list[j].user_name,get_message.client_name)==0)

{

for(k=jk<total_connect_number-1k++)

{

allusers.user_list[k]=allusers.user_list[k+1]

}

for(k=jk<total_connect_number-1k++)

{

accept_fd[k]=accept_fd[k+1]

}

break

}

}

total_connect_number--

allusers.current_number--

/*send all user the left message*/

for(j=0j<total_connect_numberj++)

{

send(accept_fd[j],&get_message,sizeof(get_message),0)

}

fprintf(stderr,"\n[TIP]\tTransmit4 (a user had exit) message ok.")

break

}/*end of case 4*/

/*receive file*/

case 6:

{

struct Message6 get_message

int j

fprintf(stderr,"\n[TIP]\tThe get_Funcnumber is:%d",get_Func_number)

memset(&get_message,0,sizeof(get_message))

if(recv(accept_fd[i],&get_message,sizeof(get_message),0)==-1)

{

fprintf(stderr,"\n[Error]\tReceive error:%s",strerror(errno))

break

}

for(j=0j<total_connect_numberj++)

{

/*find the dest accept_fd*/

if(strcmp(allusers.user_list[j].user_name,get_message.recv_user_name)==0)

{

break

}

}

/*transmit the info*/

send(accept_fd[j],&get_message,sizeof(get_message),0)

break

}

default:

{

fprintf(stderr,"\n[TIP]\tThe get_Funcnumber is:%d\n",get_Func_number)

goto exit_come

}

exit_case_come:

}/*end of switch*/

}/*end of if*/

}/*end of for*/

}/*end of while*/

exit_come:

close(listen_fd)

exit(0)

}/*end of main*/

和编译(OR IDE)环境有关,比如vc就可以直接使用所有c的库函数.

ftp使用TCP,那么就用流式套接字(SOCK_STREAM)的相关函数,如果作为客户端,调用顺序如下:

1 socket()

2 connect()

3 send/recv

4 closesocket()

如果是服务器端,调用顺序如下:

1 socket()

2 bind()

3 listen()

4 accept()

5 send/recv()

6 closesocket()

vc下有库ws2_32.lib可供使用

程序只能在传输层进行开发(既TCP/UDP),不可以在应用层进行 *** 作,即没有这样的库,调用它一个函数就实现了ftp的客户端或服务器端。如果需要可以参照网上的ftp代码。

使用如上库很简单:

#include <winsock2.h>

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

...

详见msdn


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12129925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存