?? client.c
字號(hào):
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#define SERVER_PORT 6667
#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512
//void ClienToServer(int ,char**);
void SendRequest(char**argv)
{
//設(shè)置一個(gè)socket地址結(jié)構(gòu)client_addr,代表客戶機(jī)internet地址, 端口
struct sockaddr_in client_addr;
//把一段內(nèi)存區(qū)的內(nèi)容全部設(shè)置為0
bzero(&client_addr,sizeof(client_addr));
//internet協(xié)議族
client_addr.sin_family = AF_INET;
//INADDR_ANY表示自動(dòng)獲取本機(jī)地址
client_addr.sin_addr.s_addr = htons(INADDR_ANY);
//0表示讓系統(tǒng)自動(dòng)分配一個(gè)空閑端口
client_addr.sin_port = htons(0);
//創(chuàng)建用于internet的流協(xié)議(TCP)socket,用client_socket代表客戶機(jī)socket
int 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è)置一個(gè)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;
//服務(wù)器的IP地址來自程序的參數(shù)
if(inet_aton(argv[1],&server_addr.sin_addr)==0)
{
printf("Server IP address error!\n");
exit(1);
}
server_addr.sin_port = htons(SERVER_PORT);
socklen_t server_addr_length = sizeof(server_addr);
//向服務(wù)器發(fā)起連接,連接成功后client_socket代表了客戶機(jī)和服務(wù)器的一個(gè)socket連接
if(connect(client_socket,(struct sockaddr*)&server_addr,server_addr_length)<0)
{
printf("Connect %s failed!\n",argv[1]);
exit(1);
}
char file_name[FILE_NAME_MAX_SIZE+1];
bzero(file_name,FILE_NAME_MAX_SIZE+1);
printf("Please enter the file name you want to open:\t");
scanf("%s",file_name);
char buffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
strncpy(buffer,file_name,strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));
//向服務(wù)器發(fā)送buffer中的數(shù)據(jù)
send(client_socket,buffer,BUFFER_SIZE,0);
FILE * fp = fopen(file_name,"w");
//從服務(wù)器接收數(shù)據(jù)到buffer中
bzero(buffer,BUFFER_SIZE);
int length = 0;
int write_length=0;
while(length=recv(client_socket,buffer,BUFFER_SIZE,0))
{
if(length<0)
{
printf("Receive data from %s failed!\n",argv[1]);
break;
}
write_length = fwrite(buffer,sizeof(char),length,fp);
if(write_length<length)
{
printf("File %s write failed!\n",file_name);
break;
}
bzero(buffer,BUFFER_SIZE);
}
if(write_length<=0)
{
printf("File %s dosen't exist!\n",file_name);
exit(1);
}
else{
printf("Receive file %s from Server[%s] finished ! The content lists as follows: \n",file_name,argv[1]);
fclose(fp);
FILE * fo = fopen(file_name,"r");
char ch=fgetc(fo);
while(ch!=EOF)
{
printf("%c",ch);
ch=fgetc(fo);
}
fclose(fo);
}
//關(guān)閉socket
close(client_socket);
//return 0;
}
int main(int argc,char**argv)
{
if(argc !=2)
{
//printf("請(qǐng)使用類似這樣的命令: %s ServerIPAddress\n",argv[0]);
printf("Please enter command like this: %s ServerIPAddress\n",argv[0]);
exit(1);
}
int i=0;
for(i;i<1000;i++)
SendRequest(argv);
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -