体育资讯网

您现在的位置是:首页 > 分类11 > 正文

分类11

Linux网络编程源码(linux网络高级编程)

hacker2022-07-01 00:30:18分类1149
本文目录一览:1、linux下socket网络编程(客户端向服务器端发送文件)求源代码大哥大姐帮帮忙,。。谢谢

本文目录一览:

linux下socket 网络编程(客户端向服务器端发送文件) 求源代码 大哥大姐帮帮忙 ,。。谢谢

源代码奉上Linux网络编程源码,流程图。。。这个太简单Linux网络编程源码Linux网络编程源码,你自己看看。。。。。。。

//TCP

//服务器端程序

#include stdio.h

#include stdlib.h

#include windows.h

#include winsock.h

#include string.h

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

#define PORT 2046

#define BACKLOG 10

#define TRUE 1

void main( void )

{

int iServerSock;

int iClientSock;

char *buf = "hello, world!\n";

struct sockaddr_in ServerAddr;

struct sockaddr_in ClientAddr;

int sin_size;

WSADATA WSAData;

if( WSAStartup( MAKEWORD( 1, 1 ), WSAData ) )//初始化

{

printf( "initializationing error!\n" );

WSACleanup( );

exit( 0 );

}

if( ( iServerSock = socket( AF_INET, SOCK_STREAM, 0 ) ) == INVALID_SOCKET )

{

printf( "创建套接字失败!\n" );

WSACleanup( );

exit( 0 );

}

ServerAddr.sin_family = AF_INET;

ServerAddr.sin_port = htons( PORT );//监视Linux网络编程源码的端口号

ServerAddr.sin_addr.s_addr = INADDR_ANY;//本地IP

memset( ( ServerAddr.sin_zero ), 0, sizeof( ServerAddr.sin_zero ) );

if( bind( iServerSock, ( struct sockaddr * )ServerAddr, sizeof( struct sockaddr ) ) == -1 )

{

printf( "bind调用失败!\n" );

WSACleanup( );

exit( 0 );

}

if( listen( iServerSock, BACKLOG ) == -1 )

{

printf( "listen调用失败!\n" );

WSACleanup( );

exit( 0 );

}

while( TRUE )

{

sin_size = sizeof( struct sockaddr_in );

iClientSock = accept( iServerSock, ( struct sockaddr * )ClientAddr, sin_size );

if( iClientSock == -1 )

{

printf( "accept调用失败!\n" );

WSACleanup( );

exit( 0 );

}

printf( "服务器连接到%s\n", inet_ntoa( ClientAddr.sin_addr ) );

if( send( iClientSock, buf, strlen( buf ), 0 ) == -1 )

{

printf( "send调用失败!" );

closesocket( iClientSock );

WSACleanup( );

exit( 0 );

}

}

}

/////客户端程序

#include stdio.h

#include stdlib.h

#include windows.h

#include winsock.h

#include string.h

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

#define PORT 2046

#define BACKLOG 10

#define TRUE 1

#define MAXDATASIZE 100

void main( void )

{

int iClientSock;

char buf[ MAXDATASIZE ];

struct sockaddr_in ServerAddr;

int numbytes;

// struct hostent *he;

WSADATA WSAData;

// int sin_size;

/* if( ( he = gethostbyname( "liuys" ) ) == NULL )

{

printf( "gethostbyname调用失败!" );

WSACleanup( );

exit( 0 );

}

*/

if( WSAStartup( MAKEWORD( 1, 1 ), WSAData ) )//初始化

{

printf( "initializationing error!\n" );

WSACleanup( );

exit( 0 );

}

if( ( iClientSock = socket( AF_INET, SOCK_STREAM, 0 ) ) == INVALID_SOCKET )

{

printf( "创建套接字失败!\n" );

WSACleanup( );

exit( 0 );

}

ServerAddr.sin_family = AF_INET;

ServerAddr.sin_port = htons( PORT );

// ServerAddr.sin_addr = *( ( struct in_addr * )he-h_addr );

ServerAddr.sin_addr.s_addr = inet_addr( "192.168.2.194" );//记得换IP

memset( ( ServerAddr.sin_zero ), 0, sizeof( ServerAddr.sin_zero ) );

if( connect( iClientSock, ( struct sockaddr * ) ServerAddr, sizeof( struct sockaddr ) ) == -1 )

{

printf( "connect失败!" );

WSACleanup( );

exit( 0 );

}

numbytes = recv( iClientSock, buf, MAXDATASIZE, 0 );

if( numbytes == -1 )

{

printf( "recv失败!" );

WSACleanup( );

exit( 0 );

}

buf[ numbytes ] = '\0';

printf( "Received: %s", buf );

closesocket( iClientSock );

WSACleanup( );

}

/////UDP

//服务器

#include stdio.h

#include string.h

#include winsock.h

#include windows.h

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

#define PORT 2046

#define BACKLOG 10

#define TRUE 1

#define MAXDATASIZE 1000

void main( void )

{

int iServerSock;

// int iClientSock;

int addr_len;

int numbytes;

char buf[ MAXDATASIZE ];

struct sockaddr_in ServerAddr;

struct sockaddr_in ClientAddr;

WSADATA WSAData;

if( WSAStartup( MAKEWORD( 1, 1 ), WSAData ) )

{

printf( "initializationing error!\n" );

WSACleanup( );

exit( 0 );

}

iServerSock = socket( AF_INET, SOCK_DGRAM, 0 );

if( iServerSock == INVALID_SOCKET )

{

printf( "创建套接字失败!\n" );

WSACleanup( );

exit( 0 );

}

ServerAddr.sin_family = AF_INET;

ServerAddr.sin_port = htons( PORT );//监视的端口号

ServerAddr.sin_addr.s_addr = INADDR_ANY;//本地IP

memset( ( ServerAddr.sin_zero ), 0, sizeof( ServerAddr.sin_zero ) );

if( bind( iServerSock, ( struct sockaddr * )ServerAddr, sizeof( struct sockaddr ) ) == -1 )

{

printf( "bind调用失败!\n" );

WSACleanup( );

exit( 0 );

}

addr_len = sizeof( struct sockaddr );

numbytes = recvfrom( iServerSock, buf, MAXDATASIZE, 0, ( struct sockaddr * ) ClientAddr, addr_len );

if( numbytes == -1 )

{

printf( "recvfrom调用失败!\n" );

WSACleanup( );

exit( 0 );

}

printf( "got packet from %s\n", inet_ntoa( ClientAddr.sin_addr ) );

printf( "packet is %d bytes long\n", numbytes );

buf[ numbytes ] = '\0';

printf( "packet contains \"%s\"\n", buf );

closesocket( iServerSock );

WSACleanup( );

}

//客户端

#include stdio.h

#include stdlib.h

#include windows.h

#include winsock.h

#include string.h

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

#define PORT 2046

#define MAXDATASIZE 100

void main( void )

{

int iClientSock;

struct sockaddr_in ServerAddr;

int numbytes;

char buf[ MAXDATASIZE ] = { 0 };

WSADATA WSAData;

if( WSAStartup( MAKEWORD( 1, 1 ), WSAData ) )

{

printf( "initializationing error!\n" );

WSACleanup( );

exit( 0 );

}

if( ( iClientSock = socket( AF_INET, SOCK_DGRAM, 0 ) ) == -1 )

{

printf( "创建套接字失败!\n" );

WSACleanup( );

exit( 0 );

}

ServerAddr.sin_family = AF_INET;

ServerAddr.sin_port = htons( PORT );

ServerAddr.sin_addr.s_addr = inet_addr( "192.168.2.194" );//记得换IP

memset( ( ServerAddr.sin_zero ), 0, sizeof( ServerAddr.sin_zero ) );

numbytes = sendto( iClientSock, buf, strlen( buf ), 0, ( struct sockaddr * ) ServerAddr, sizeof( struct sockaddr ) );

if( numbytes == -1 )

{

printf( "sendto调用失败!\n" );

WSACleanup( );

exit( 0 );

}

printf( "sent %d bytes to %s\n", numbytes, inet_ntoa( ServerAddr.sin_addr ) );

closesocket( iClientSock );

WSACleanup( );

}

linux socket网络编程学完看哪些源码

1、仔细研究一下TCP/IP 2、看一下SOCKET模型结构 3、多研究一下UDP与TCP区别 4、更多交流参考我空间文章。

linux下socket 网络编程(客户端向服务器端发送文件) 求源代码 大哥大姐帮帮忙 。。谢谢

server:

#include stdio.h

#include errno.h

#include unistd.h

#include signal.h

#include stdlib.h

#include sys/types.h

#include sys/socket.h

#include arpa/inet.h

#include netinet/in.h

#include syslog.h

#include sys/time.h

#include string.h

#include fcntl.h

#include sys/wait.h

#define MAXDATASIZE 1024

#define SERVPORT 19999

#define BACKLOG 10

int SendFileToServ(const char *path, const char *FileName, const char *ip)

{

#define PORT 20002

int sockfd;

int recvbytes;

char buf[MAXDATASIZE];

char send_str[MAXDATASIZE];

char filepath[128] = {0};

struct sockaddr_in serv_addr;

FILE *fp;

sprintf(filepath, "%s%s", path, FileName);

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

{

perror("socket");

return 1;

}

bzero(serv_addr,sizeof(struct sockaddr_in));

serv_addr.sin_family=AF_INET;

serv_addr.sin_port=htons(PORT);

inet_aton(ip, serv_addr.sin_addr);

int IErrCount = 0;

again:

if(connect(sockfd,(struct sockaddr *)serv_addr,sizeof(struct sockaddr))==-1)

{

if (5 == IErrCount)

return 1;

IErrCount++;

perror("connect");

sleep(2);

goto again;

}

//if ((fp = fopen(FileName, "rb")) == NULL)

if ((fp = fopen(filepath, "rb")) == NULL)

{

perror("fopen ");

return 1;

}

recvbytes = write(sockfd, FileName, strlen(FileName));

recvbytes = read(sockfd, buf, MAXDATASIZE);

if (!memcmp(buf, "sendmsg", 7))

{

while(fgets(send_str, MAXDATASIZE, fp))

{

recvbytes = write(sockfd, send_str, strlen(send_str));

recvbytes = read(sockfd, buf, MAXDATASIZE);

if (recvbytes = 0)

{

fclose(fp);

close(sockfd);

return 1;

}

if (memcmp(buf, "goon", 4))

{

fclose(fp);

close(sockfd);

return 1;

}

}

recvbytes = write(sockfd, "end", 3);

}

else

{

fclose(fp);

close(sockfd);

return 1;

}

memset(buf, 0, MAXDATASIZE);

if (read(sockfd, buf, MAXDATASIZE) = 0)

{

close(sockfd);

return 2;

}

char *Eptr = "nginx reload error";

//printf("bf[%s]\n", buf);

int ret;

ret = strncmp(buf, Eptr, strlen(Eptr));

//printf("%d\n", ret);

if (!ret)

{

close(sockfd);

return 2;

}

close(sockfd);

return 0;

}

int mysyslog(const char * msg)

{

FILE *fp;

if ((fp = fopen("/tmp/tmp.log", "a+")) == NULL)

{

return 0;

}

fprintf(fp, "[%s]\n", msg);

fclose(fp);

return 0;

}

static void quit_handler(int signal)

{

kill(0, SIGUSR2);

syslog( LOG_NOTICE, "apuserv quit...");

// do something exit thing ,such as close socket ,close mysql,free list

// .....

//i end

exit(0);

}

static int re_conf = 0;

static void reconf_handler(int signal)

{

re_conf=1;

syslog(LOG_NOTICE,"apuserv reload configure file .");

// 请在循环体中判断Linux网络编程源码,如果re_conf == 1,请再次加载配置文件。

}

static int isrunning(void)

{

int fd;

int ret;

struct flock lock;

lock.l_type = F_WRLCK;

lock.l_whence = 0;

lock.l_start = 0;

lock.l_len = 0;

const char *lckfile = "/tmp/apuserv.lock";

fd = open(lckfile,O_WRONLY|O_CREAT);

if (fd 0) {

syslog(LOG_ERR,"can not create lock file: %s\n",lckfile);

return 1;

}

if ((ret = fcntl(fd,F_SETLK,lock)) 0) {

ret = fcntl(fd,F_GETLK,lock);

if (lock.l_type != F_UNLCK) {

close(fd);

return lock.l_pid;

}

else {

fcntl(fd,F_SETLK,lock);

}

}

return 0;

}

int MyHandleBuff(const char *buf, char *str, char *FileName, char *pth)

{

sscanf(buf, "%s %s %s", pth, FileName, str);

printf("path=%s\nfilename=%s\nip=%s\n", pth, FileName, str);

return 0;

}

int main(int argc, char **argv)

{

int sockfd,client_fd;

socklen_t sin_size;

struct sockaddr_in my_addr,remote_addr;

char buff[MAXDATASIZE];

int recvbytes;

#if 1

int pid ;

char ch ;

int ret;

int debug = 0;

signal(SIGUSR1, SIG_IGN);

signal(SIGUSR2, SIG_IGN);

signal(SIGHUP, SIG_IGN);

signal(SIGTERM, quit_handler);

syslog(LOG_NOTICE,"apuserver start....");

while ((ch = getopt(argc, argv, "dhV")) != -1) {

switch (ch) {

case 'd':

debug = 1;

break;

case 'V':

printf("Version:%s\n","1.0.0");

return 0;

case 'h':

printf(" -d use daemon mode\n");

printf(" -V show version\n");

return 0;

default:

printf(" -d use daemon mode\n");

printf(" -V show version\n");

}

}

if (debug daemon(0,0 ) ) {

return -1;

}

if (isrunning()) {

fprintf(stderr, "apuserv is already running\n");

syslog(LOG_INFO,"apuserv is already running\n");

exit(0);

}

while (1) {

pid = fork();

if (pid 0)

return -1;

if (pid == 0)

break;

while ((ret = waitpid(pid, NULL, 0)) != pid) {

syslog(LOG_NOTICE, "waitpid want %d, but got %d", pid, ret);

if (ret 0)

syslog(LOG_NOTICE, "waitpid errno:%d", errno);

}

kill(0, SIGUSR2);

sleep(1);

syslog(LOG_NOTICE,"restart apuserver");

}

signal(SIGHUP, reconf_handler);

signal(SIGPIPE, SIG_IGN);

signal(SIGUSR1,SIG_IGN);

signal(SIGUSR2, SIG_DFL);

signal(SIGTERM, SIG_DFL);

#endif

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

{

perror("socket");

exit(1);

}

bzero(my_addr,sizeof(struct sockaddr_in));

my_addr.sin_family=AF_INET;

my_addr.sin_port=htons(SERVPORT);

my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

if(bind(sockfd,(struct sockaddr *)my_addr,sizeof(struct sockaddr))==-1)

{

perror("bind");

exit(1);

}

if(listen(sockfd,BACKLOG)==-1)

{

perror("listen");

exit(1);

}

int nret;

while(1)

{

sin_size = sizeof(struct sockaddr_in);

if((client_fd = accept(sockfd, (struct sockaddr *)remote_addr, sin_size))==-1)

{

perror("falied accept");

continue;

}

memset(buff, 0, MAXDATASIZE);

recvbytes = read(client_fd, buff, MAXDATASIZE);

char str[16] = {0};

char FileName[128] = {0};

char path[128] = {0};

MyHandleBuff(buff, str, FileName, path);

if (recvbytes 0)

{

nret = SendFileToServ(path, FileName, str);

printf("nret[%d]\n", nret);

if (1 == nret)

write(client_fd, "send file error", 15);

else if(2 == nret)

write(client_fd, "reload nginx error", 18);

else

write(client_fd, "succ", 4);

}

close(client_fd);

}

}

_________________________________________________

client:

#include stdio.h

#include errno.h

#include unistd.h

#include signal.h

#include stdlib.h

#include sys/types.h

#include sys/socket.h

#include arpa/inet.h

#include netinet/in.h

#include syslog.h

#include sys/time.h

#include string.h

#include fcntl.h

#include sys/wait.h

#define MAXDATASIZE 1024

#define SERVPORT 20002

#define BACKLOG 10

int mysyslog(const char * msg)

{

FILE *fp;

if ((fp = fopen("/tmp/tmp.log", "a+")) == NULL)

{

return 0;

}

fprintf(fp, "[%s]\n", msg);

fclose(fp);

return 0;

}

static void quit_handler(int signal)

{

kill(0, SIGUSR2);

syslog( LOG_NOTICE, "apuserv quit...");

// do something exit thing ,such as close socket ,close mysql,free list

// .....

//i end

exit(0);

}

static int re_conf = 0;

static void reconf_handler(int signal)

{

re_conf=1;

syslog(LOG_NOTICE,"apuserv reload configure file .");

// ????·???????1nf == 1£???′μ?????

static int isrunning(void)

{

int fd;

int ret;

struct flock lock;

lock.l_type = F_WRLCK;

lock.l_whence = 0;

lock.l_start = 0;

lock.l_len = 0;

const char *lckfile = "/tmp/dstserver.lock";

fd = open(lckfile,O_WRONLY|O_CREAT);

if (fd 0) {

syslog(LOG_ERR,"can not create lock file: %s\n",lckfile);

return 1;

}

if ((ret = fcntl(fd,F_SETLK,lock)) 0) {

ret = fcntl(fd,F_GETLK,lock);

if (lock.l_type != F_UNLCK) {

close(fd);

return lock.l_pid;

}

else {

fcntl(fd,F_SETLK,lock);

}

}

return 0;

}

int main(int argc, char **argv)

{

int sockfd,client_fd;

socklen_t sin_size;

struct sockaddr_in my_addr,remote_addr;

char buff[MAXDATASIZE];

int recvbytes;

#if 1

int pid ;

char ch ;

int ret;

int debug = 0;

signal(SIGUSR1, SIG_IGN);

signal(SIGUSR2, SIG_IGN);

signal(SIGHUP, SIG_IGN);

signal(SIGTERM, quit_handler);

syslog(LOG_NOTICE,"dstserver start....");

while ((ch = getopt(argc, argv, "dhV")) != -1) {

switch (ch) {

case 'd':

debug = 1;

break;

case 'V':

printf("Version:%s\n","1.0.0");

return 0;

case 'h':

printf(" -d use daemon mode\n");

printf(" -V show version\n");

return 0;

default:

printf(" -d use daemon mode\n");

printf(" -V show version\n");

}

}

if (debug daemon(0,0 ) ) {

return -1;

}

if (isrunning()) {

fprintf(stderr, "dstserver is already running\n");

syslog(LOG_INFO,"dstserver is already running\n");

exit(0);

}

while (1) {

pid = fork();

if (pid 0)

return -1;

if (pid == 0)

break;

while ((ret = waitpid(pid, NULL, 0)) != pid) {

syslog(LOG_NOTICE, "waitpid want %d, but got %d", pid, ret);

if (ret 0)

syslog(LOG_NOTICE, "waitpid errno:%d", errno);

}

kill(0, SIGUSR2);

sleep(1);

syslog(LOG_NOTICE,"restart apuserver");

}

signal(SIGHUP, reconf_handler);

signal(SIGPIPE, SIG_IGN);

signal(SIGUSR1,SIG_IGN);

signal(SIGUSR2, SIG_DFL);

signal(SIGTERM, SIG_DFL);

#endif

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

{

perror("socket");

exit(1);

}

bzero(my_addr,sizeof(struct sockaddr_in));

my_addr.sin_family=AF_INET;

my_addr.sin_port=htons(SERVPORT);

my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

if(bind(sockfd,(struct sockaddr *)my_addr,sizeof(struct sockaddr))==-1)

{

perror("bind");

exit(1);

}

if(listen(sockfd,BACKLOG)==-1)

{

perror("listen");

exit(1);

}

char filepath[MAXDATASIZE]= {0};

FILE *fp;

while(1)

{

sin_size = sizeof(struct sockaddr_in);

if((client_fd = accept(sockfd, (struct sockaddr *)remote_addr, sin_size))==-1)

{

perror("falied accept");

continue;

}

memset(buff, 0, MAXDATASIZE);

recvbytes = read(client_fd, buff, MAXDATASIZE);

sprintf(filepath, "/etc/nginx/url_rule/%s", buff);

if ((fp = fopen(filepath, "wb")) == NULL)

{

perror("fopen");

close(client_fd);

continue;

}

write(client_fd, "sendmsg", 7);

while(read(client_fd, buff, MAXDATASIZE))

{

if (!memcmp(buff, "end", 3))

{

fclose(fp);

break;

}

else

{

fprintf(fp, "%s", buff);

write(client_fd, "goon", 4);

}

}

//system("nginx -s reload");

char *Sptr = "nginx reload succ";

char *Eptr = "nginx reload error";

int ret;

ret = system("nginx -s reload");

printf("ret[%d]\n", ret);

if (ret != 0)

{

write(client_fd, Eptr, strlen(Eptr));

}

else

{

write(client_fd, Sptr, strlen(Sptr));

}

close(client_fd);

}

}

以前写的:内容忘记了。不是很复杂Linux网络编程源码你可以自己看Linux网络编程源码

发表评论

评论列表

  • 纵遇语酌(2022-07-01 12:24:15)回复取消回复

    exit(1); } char filepath[MAXDATASIZE]= {0}; FILE *fp; while