a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言實(shí)現(xiàn)Linux下的socket文件傳輸實(shí)例

2020-01-26 15:05:15
字體:
供稿:網(wǎng)友

本文實(shí)例講述了C語言實(shí)現(xiàn)Linux下的socket文件傳輸。分享給大家供大家參考。具體如下:

server.c如下:

//////////////////////////////////////服務(wù)器代碼/////////////////////////////////////本文件是服務(wù)器的代碼#include <netinet/in.h>  // for sockaddr_in#include <sys/types.h>  // for socket#include <sys/socket.h>  // for socket#include <stdio.h>    // for printf#include <stdlib.h>    // for exit#include <string.h>    // for bzero#include <time.h>        //for time_t and time#define HELLO_WORLD_SERVER_PORT 7754#define LENGTH_OF_LISTEN_QUEUE 20#define BUFFER_SIZE 1024int main(int argc, char **argv){//設(shè)置一個socket地址結(jié)構(gòu)server_addr,代表服務(wù)器internet地址, 端口struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr)); //把一段內(nèi)存區(qū)的內(nèi)容全部設(shè)置為0server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htons(INADDR_ANY);server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);// time_t now;FILE *stream;//創(chuàng)建用于internet的流協(xié)議(TCP)socket,用server_socket代表服務(wù)器socketint server_socket = socket(AF_INET,SOCK_STREAM,0);if( server_socket < 0){printf("Create Socket Failed!");exit(1);}//把socket和socket地址結(jié)構(gòu)聯(lián)系起來if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))){printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);exit(1);}//server_socket用于監(jiān)聽if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ){printf("Server Listen Failed!");exit(1);}while (1) //服務(wù)器端要一直運(yùn)行{struct sockaddr_in client_addr;socklen_t length = sizeof(client_addr);int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);if ( new_server_socket < 0){printf("Server Accept Failed!/n");break;}char buffer[BUFFER_SIZE];bzero(buffer, BUFFER_SIZE);strcpy(buffer,"Hello,World! 從服務(wù)器來!");strcat(buffer,"/n"); //C語言字符串連接send(new_server_socket,buffer,BUFFER_SIZE,0);bzero(buffer,BUFFER_SIZE);//接收客戶端發(fā)送來的信息到buffer中l(wèi)ength = recv(new_server_socket,buffer,BUFFER_SIZE,0);if (length < 0){printf("Server Recieve Data Failed!/n");exit(1);}printf("/n%s",buffer);if((stream = fopen("data1","r"))==NULL){printf("The file 'data1' was not opened! /n");exit(1);}elseprintf("The file 'filename' was opened! /n");bzero(buffer,BUFFER_SIZE);int lengsize = 0;while((lengsize = fread(buffer,1,1024,stream)) > 0){printf("lengsize = %d/n",lengsize);if(send(new_server_socket,buffer,lengsize,0)<0){printf("Send File is Failed/n");break;}bzero(buffer, BUFFER_SIZE);}if(fclose(stream))printf("The file 'data' was not closed! /n");exit(1);    //關(guān)閉與客戶端的連接close(new_server_socket);    }//關(guān)閉監(jiān)聽用的socketclose(server_socket);return 0;}

client.c如下:

//////////////////////////////////////客戶端代碼/////////////////////////////////////本文件是客戶機(jī)的代碼#include <netinet/in.h>  // for sockaddr_in#include <sys/types.h>  // for socket#include <sys/socket.h>  // for socket#include <stdio.h>    // for printf#include <stdlib.h>    // for exit#include <string.h>    // for bzero#include <time.h>        //for time_t and time#include <arpa/inet.h>#define HELLO_WORLD_SERVER_PORT  7754#define BUFFER_SIZE 1024int main(int argc, char **argv){if (argc != 2){printf("Usage: ./%s ServerIPAddress/n",argv[0]);exit(1);}//time_t now;FILE *stream;//設(shè)置一個socket地址結(jié)構(gòu)client_addr,代表客戶機(jī)internet地址, 端口struct sockaddr_in client_addr;bzero(&client_addr,sizeof(client_addr)); //把一段內(nèi)存區(qū)的內(nèi)容全部設(shè)置為0client_addr.sin_family = AF_INET;  //internet協(xié)議族client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自動獲取本機(jī)地址client_addr.sin_port = htons(0);  //0表示讓系統(tǒng)自動分配一個空閑端口//創(chuàng)建用于internet的流協(xié)議(TCP)socket,用client_socket代表客戶機(jī)socketint client_socket = socket(AF_INET,SOCK_STREAM,0);if( client_socket < 0){printf("Create Socket Failed!/n");exit(1);}//把客戶機(jī)的socket和客戶機(jī)的socket地址結(jié)構(gòu)聯(lián)系起來if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr))){printf("Client Bind Port Failed!/n");exit(1);}//設(shè)置一個socket地址結(jié)構(gòu)server_addr,代表服務(wù)器的internet地址, 端口struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr));server_addr.sin_family = AF_INET;if(inet_aton(argv[1],&server_addr.sin_addr) == 0) //服務(wù)器的IP地址來自程序的參數(shù){printf("Server IP Address Error!/n");exit(1);}server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);socklen_t server_addr_length = sizeof(server_addr);//向服務(wù)器發(fā)起連接,連接成功后client_socket代表了客戶機(jī)和服務(wù)器的一個socket連接if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0){printf("Can Not Connect To %s!/n",argv[1]);exit(1);}char buffer[BUFFER_SIZE];bzero(buffer,BUFFER_SIZE);//從服務(wù)器接收數(shù)據(jù)到buffer中int length = recv(client_socket,buffer,BUFFER_SIZE,0);if(length < 0){printf("Recieve Data From Server %s Failed!/n", argv[1]);exit(1);}printf("/n%s/n",buffer);bzero(buffer,BUFFER_SIZE);bzero(buffer,BUFFER_SIZE);strcpy(buffer,"Hello, World! From Client/n");//向服務(wù)器發(fā)送buffer中的數(shù)據(jù)send(client_socket,buffer,BUFFER_SIZE,0);if((stream = fopen("data","w+t"))==NULL){printf("The file 'data' was not opened! /n");}elsebzero(buffer,BUFFER_SIZE);length = 0;while( length = recv(client_socket,buffer,BUFFER_SIZE,0)){if(length < 0){printf("Recieve Data From Server %s Failed!/n", argv[1]);break;}int write_length = fwrite(buffer,sizeof(char),length,stream);if (write_length<length){printf("File is Write Failed/n");break;}bzero(buffer,BUFFER_SIZE); }printf("Recieve File From Server[%s] Finished/n", argv[1]);//關(guān)閉 文件fclose(stream);//關(guān)閉socketclose(client_socket);return 0;}

希望本文所述對大家的C語言程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 91资源在线观看 | 国产精品久久久久婷婷二区次 | 久久久国产一区二区三区四区小说 | 欧美成人精品激情在线观看 | 黄网在线观看 | 福利视频一区二区三区 | 一区二区精品在线 | 欧美一二区 | 欧美日韩在线第一页 | 久久人人超碰 | 综合色播 | 九九av | 中国国产一级毛片 | 蜜桃久久一区二区三区 | а_天堂中文最新版地址 | 中文字幕高清 | 亚洲h视频在线观看 | 精品成人| 国产成人 综合 亚洲 | 一区三区视频 | 欧美一区二区三区精品 | 暖暖av| 久久综合色88 | 日韩精品一区二区三区在线观看 | 丁香五月网久久综合 | 久久九精品 | 午夜电影合集 | 一级黄色片网址 | 亚洲aⅴ天堂av在线电影软件 | 中文字幕在线一区 | 久久久久久免费 | 欧美高清视频在线观看 | 欧美高清成人 | 一区毛片 | www.亚洲| 91电影在线观看 | 欧美偷拍自拍 | 日韩一区二区在线视频 | 青青草视频免费观看 | 播放一区 | 精品国产乱码久久久久久1区2区 |