Linux下通过socket通信实现客户端向服务器发送文件
来源:互联网 发布:苹果电脑软件少 编辑:程序博客网 时间:2024/06/14 23:07
通过socket通信实现客户端向服务器实现文件发送。整合好的代码如下:
Client端的代码
/* ************************************************* *Name : send_file.c * *Date : 2015-04-15 * *Author : Sniper * *Aim : Client send the file to the Server.* ************************************************* */#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <stdlib.h>#include <memory.h>#include <string.h>#define BUFFER_SIZE 1024 #define FILE_NAME_MAX_SIZE 512 int main(int argc,char *argv[]){int socketfd;struct sockaddr_in s_add,c_add;unsigned short portnum = 0x22B8;int len;char buffer[BUFFER_SIZE]; FILE *fp ;int file_block_length = 0; /* *Create the socket */if((socketfd=socket(AF_INET,SOCK_STREAM,0))<0){printf("Socket create error! \n");exit(1);}/* *set the address format */bzero(&s_add,sizeof(struct sockaddr_in));s_add.sin_family = AF_INET;/* *change the VM address */s_add.sin_addr.s_addr = inet_addr("192.168.81.122");//change the string to 32-bit internet byte.s_add.sin_port=htons(portnum);if (connect(socketfd,(struct sockaddr *)(&s_add),sizeof(struct sockaddr))<0){printf("Connect failure!\n");return -1;}elseprintf("Connect Success!\n");/* *Send the file */fp = fopen("test", "r"); if (fp == NULL) { printf("File: test Not Found!\n"); } else { bzero(buffer, BUFFER_SIZE); while( (file_block_length = fread(buffer, sizeof(char), BUFFER_SIZE, fp)) > 0) { printf("file_block_length = %d\n", file_block_length); /* *Send the string to the buffer */ if (send(socketfd, buffer, file_block_length, 0) < 0) { printf("Send File:test Failed!\n"); break; } bzero(buffer, sizeof(buffer)); } fclose(fp); printf("File:test Transfer Finished!\n"); } close(socketfd); return 0;}
Server端的代码:
/* ************************************************ *Name : receive_file.c * *Date : 2015-04-15 * *Author : Sniper * *Aim : Service can receive more than one * * Client that send the file.The main* * target is to get the file. * ************************************************ */#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <stdlib.h>#include <memory.h>#include <string.h>#include <sys/socket.h>#include <pthread.h>int socketfd_connect = 0;pthread_t ntid;int len = 0;#define BUFFER_SIZE 1024#define FILE_NAME_MAX_SIZE 512void *print_message(void *arg){/* *define the buffer to receive the file */int pthread_socket_connect;int i=0;int write_length;FILE *fp;char buffer[BUFFER_SIZE];int length = 0;bzero(buffer,BUFFER_SIZE);pthread_socket_connect = socketfd_connect;pthread_detach(ntid);/* *Receive the file */fp = fopen("test","w");if(NULL == fp ){printf("File:\t Can Not Open To Write\n");exit(1);}while( length = recv(pthread_socket_connect,buffer,BUFFER_SIZE,0)){if(length < 0){ printf("Recieve Data From Client Failed!\n"); break;}/* *write the buffer to the file */write_length = fwrite(buffer,sizeof(char),length,fp);if (write_length<length){ printf("File:test Write Failed\n"); break;}bzero(buffer,BUFFER_SIZE); }printf("Recieve File: test From Client Finished\n");fclose(fp); /******************************************************************/pthread_exit(0);}int main(int argc,char *argv[]){int socketfd_listen;struct sockaddr_in server_addr,client_addr;unsigned short portnum = 0x22B8;int err;/* *Create the socket */if((socketfd_listen=socket(AF_INET,SOCK_STREAM,0))<0){printf("Socket create error! \n");exit(1);}/* *set the address format */bzero(&server_addr,sizeof(struct sockaddr_in));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=inet_addr("192.168.81.122");server_addr.sin_port=htons(portnum);if(bind(socketfd_listen,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))<0){printf("bind failure!\n");return -1;}printf("bind Success!\n");if(listen(socketfd_listen,5)<0){printf("Listen failure!\n");return -1;}len=sizeof(struct sockaddr);/* *Using the loop to send and receive the message. */while(1){socketfd_connect = accept(socketfd_listen, (struct sockaddr *)(&client_addr), &len);if(socketfd_connect<0){printf("accept fail !\n");return -1;}err = pthread_create(&ntid,NULL,print_message,NULL);if(err!=0)printf("can't create pthread!\n");}close(socketfd_listen);close(socketfd_connect);return 0;}编译两者即可,我用了一个test为例来测试,文件内容随意自己输入。大家可以自己尝试。
上图是演示结果!
0 0
- Linux下通过socket通信实现客户端向服务器发送文件
- Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据
- Android作为服务器通过USB使用Socket协议向PC客户端发送文件
- Socket通信简单实现客户端-服务器消息发送
- java 通过 socket 实现 服务器和客户端的通信 TCP
- java实现客户端向服务器发送文件的操作
- 通过服务器向指定客户端发送消息
- linux下socket编程 select实现非阻塞模式多台客户端与服务器通信
- linux下socket实现多个客户端与服务器的通信
- Linux下网络socket编程——实现服务器(select)与多个客户端通信
- linux下用多线程实现socket服务器和客户端的异步通信
- linux 下socket 服务器和客户端异步通信
- Android客户端通过socket与服务器通信
- Android客户端通过socket与服务器通信
- Android客户端通过socket与服务器通信
- Android客户端通过socket与服务器通信
- Android客户端通过socket与服务器通信
- Android客户端通过socket与服务器通信
- Android中图片由Matrix变化后坐标的改变
- __int64 与long long 的区别
- mahout
- Python脚本如何生成Windows可执行文件.exe
- S3C2416 按键驱动 --中断方式
- Linux下通过socket通信实现客户端向服务器发送文件
- Chronometer、ListView
- PHP是什么?
- java接口工厂
- Discuz完整手动迁移教程(不使用备份功能)
- Linux Namespace (一)
- Mahout的taste里的几种相似度计算方法
- spring mvc @InitBinder
- 排他