Linux socket程式設計學習初步(3)--客戶端向伺服器請求檔案
伺服器端:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>//read,write
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/fcntl.h>//open
#include <strings.h>
#define SERVER_PORT 12345
#define BUF_SIZE 4096 /* block transfer size */
#define QUEUE_SIZE 10 /* how many client can connect at the same time */
void fatal(char *string)
{
printf("%s\n",string);
exit(1);
}
int main(/*int argc,char * argv[]*/)
{
int s,b,l,fd,sa,bytes,on=1;
char buf[BUF_SIZE]; /*buf for outgoing files*/
struct sockaddr_in channel; /* hold IP address*/
/* Build address structure to bind to socket. */
bzero(&channel,sizeof(channel));
channel.sin_family=AF_INET;
channel.sin_addr.s_addr=htonl(INADDR_ANY);
channel.sin_port=htons(SERVER_PORT);
/* Passive open.Wait for connection. */
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); /* Creat socket */
if(s<0) fatal("socket failed");
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&on,sizeof(on));
/* use the socket for many time (up word) */
b=bind(s,(struct sockaddr *)&channel,sizeof(channel));
if(b<0) fatal("blind failed");
l=listen(s,QUEUE_SIZE);
if(l<0) fatal("listen failed");
/* Socket is now set up and bound. Wait for connection and process it. */
while(1)
{
sa=accept(s,0,0);
if(sa<0) fatal("accept failed");
recv(sa,buf,BUF_SIZE,0);
/* Get and return the file. */
fd=open(buf,O_RDONLY);
if(fd<0) fatal("open failed");
while(1)
{
bytes=read(fd,buf,BUF_SIZE);
if(bytes<=0) break;
write(sa,buf,bytes);
}
close(fd);
close(sa);
}
return 0;
}
客戶端:
/*
*This page contains a client program that can request a flie from the server program.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>//read,write
#include <stdio.h>
#define SERVER_PORT 12345
#define BUF_SIZE 4096
#define PATH "/home/fupeng/Desktop/test.txt"
#define DEST_IP "127.0.0.1"
void fatal(char *s)
{
printf("%s\n",s);
exit(1);
}
int main(/*int argc,char * *argv*/)
{
int c,s,bytes;
char buf[BUF_SIZE]; /*buf for incoming files*/
struct sockaddr_in channel; /* hold IP address*/
// if (argc!=3)fatal("Usage:client IPaddress file-name");
s=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s<0)fatal("socket");
bzero(&channel,sizeof(channel));
channel.sin_family=AF_INET;
channel.sin_port=htons(SERVER_PORT);
if(inet_aton(DEST_IP,&channel.sin_addr)==0)
{
/* use the ASCII ip for the server's sin_addr. */
fprintf(stderr,"Inet_aton erro\n");
exit(1);
}
c=connect(s,(struct sockaddr *)&channel,sizeof(channel));
if(c<0)fatal("connetct failed");
// send(s,argv[2],strlen(argv[2]),0);
send(s,PATH,strlen(PATH),0);//BY FUPENG
/* Go get the file and write it to standard output.*/
while(1)
{
bytes=read(s,buf,BUF_SIZE);
if(bytes<=0) exit(0);
write(1,buf,bytes);
}
}
給出了客戶端由伺服器獲取一個檔案的例子。
獲取的檔案將直接顯示在終端介面上。
相關文章
- Linux socket程式設計學習初步(4)--伺服器端多程式Linux程式設計伺服器
- 從客戶端向服務端發起請求(3種)客戶端服務端
- Linux socket程式設計學習初步(5)--伺服器多執行緒Linux程式設計伺服器執行緒
- Linux系統程式設計(34)—— socket程式設計之TCP伺服器與客戶端的互動Linux程式設計TCP伺服器客戶端
- linux socket程式設計初步(2)Linux程式設計
- java TCP入門程式設計(檔案傳送、服務端接收多個客戶端請求)JavaTCP程式設計服務端客戶端
- Linux網路程式設計之socket簡單通訊--客戶端程式碼Linux程式設計客戶端
- android客戶端向伺服器傳送請求中文亂碼的問Android客戶端伺服器
- C++客戶端程式(socket)C++客戶端
- UNIX網路程式設計學習(18)--UDP回射(伺服器+客戶端)程式程式設計UDP伺服器客戶端
- nginx截獲客戶端請求Nginx客戶端
- Java Web學習(1): 客戶端請求、伺服器響應及其HTTP狀態碼JavaWeb客戶端伺服器HTTP
- linux下TCP socket程式設計初步(1)LinuxTCP程式設計
- C#Socket伺服器與客戶端的開發(3)C#伺服器客戶端
- 【windows socket+TCP伺服器客戶端】WindowsTCP伺服器客戶端
- 【windows socket+UDP伺服器客戶端】WindowsUDP伺服器客戶端
- 【windows socket+HTTP伺服器客戶端】WindowsHTTP伺服器客戶端
- Linux下簡單的ACE socket客戶端和伺服器端Linux客戶端伺服器
- Android客戶端請求伺服器端的詳細解釋Android客戶端伺服器
- 043-socket程式設計傳送GET請求程式設計
- UNIX網路程式設計學習(8)--伺服器端顯示客戶端的IP地址和埠號程式設計伺服器客戶端
- socket.io 客戶端與伺服器應用客戶端伺服器
- 跟著大彬讀原始碼 - Redis 3 - 伺服器如何響應客戶端請求?(下)原始碼Redis伺服器客戶端
- 服務端如何獲取客戶端請求IP地址服務端客戶端
- Python socket的客戶端Python客戶端
- 客戶端Cookie中文程式設計 (轉)客戶端Cookie程式設計
- 網站提示400 - 請求錯誤,伺服器無法理解客戶端的請求怎麼辦網站伺服器客戶端
- Node.js 使用http客戶端向網站請求資料並儲存Node.jsHTTP客戶端網站
- linux網路程式設計之用socket實現簡單客戶端和服務端的通訊(基於TCP)Linux程式設計客戶端服務端TCP
- Go Web 程式設計--深入學習解析 HTTP 請求GoWeb程式設計HTTP
- python網路程式設計學習筆記(3):socket網路伺服器Python程式設計筆記伺服器
- Java OAuth 2.0 客戶端程式設計(二): 客戶端憑據授權JavaOAuth客戶端程式設計
- 學習記錄|Socket程式設計程式設計
- nginx 處理客戶端請求的完整過程Nginx客戶端
- 學習 WCF (3)--開發WCF客戶程式
- 簡單的C++檔案伺服器--Linux C++客戶端從服務端獲取檔案C++伺服器Linux客戶端服務端
- 客戶端的socket是否需要bind?客戶端
- 請學習程式設計程式設計