⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2c.c

📁 在linux实现客户端和服务器端的通信。
💻 C
字号:
#include <stdio.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <netdb.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <sys/stat.h> 
#include <netinet/in.h> 

#define DEST_IP "192.168.0.2" 
#define DEST_PORT 3001 //*欲连接服务器端口*/ 
#define MAXDATASIZE 128 

int main(int argc,char * argv[]) 
{ 
int sockfd; 
int numbytes;
char filename[20]; 
FILE *fp; 
int connflag; 
int flag=1; //*连接状态标志*/ 
char buf[MAXDATASIZE]; 
char par[20]; /*参数*/ 

struct sockaddr_in serv_addr; 
struct hostent *he; 

struct sockaddr_in their_addr;
if(argc !=2)
	{
	printf("Error: client hostname\n");
	exit(1);
	}
	if((he=gethostbyname(argv[1]))==NULL){
		printf("Gethostbyname error!\n");
		exit(1);
		}


sockfd=socket(AF_INET,SOCK_STREAM,0); //*建立流式socket*/ 
if(sockfd==-1) //*socket调用错误处理*/ 
{ 
printf("SOCKET ERROR!!\n"); 
exit(1); 
} 
serv_addr.sin_family=AF_INET; 
serv_addr.sin_port=htons(DEST_PORT); 
serv_addr.sin_addr=*((struct in_addr *)he->h_addr); 
bzero(&(serv_addr.sin_zero),8); 
connflag=connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr)); 
if(connflag==-1) //*connect调用错误处理*/ 
{ 
printf("CONNECT ERROR!!\n"); 
exit(1); 
} 
//******************************/ 

while(1){ 
recv(sockfd,buf,MAXDATASIZE,0); 


if(strncmp(buf,"connect stop!",13)==0) 
end_sock(sockfd,buf,filename); 

printf("%s",buf); 

scanf("%s,",&buf); 
send(sockfd,buf,MAXDATASIZE,0); 

if(strcmp(buf,"put")==0) 
{ 
	tran_file(sockfd,buf); 
} 
if(strcmp(buf,"query")==0) 
{ 
	f_query(sockfd,buf); 
} 
if(strcmp(buf,"result")==0) 
{ 
	f_result(sockfd,buf); 
} 
if(strcmp(buf,"ls")==0) 
{ 
	ls(sockfd,buf); 
} 

//sleep(0.2); 
} 
/**********USERNAME&PASSWORD*******/ 
printf("lalalala\n"); 
close(sockfd); 
} 

//****************连接结束******************/ 
end_sock(int sockfd) 
{ 
printf("connect stop!\n"); 
close(sockfd); 
exit(0); 
return 0; 
} 
/****************传送文件******************/ 
tran_file(int sockfd,char * buf) 
{ 
FILE * fp; 
char filename[20]; 

printf("File name is:"); 
scanf("%s",&filename); 
printf("%s\n",filename); 

if((fp=fopen(filename,"rb"))==NULL) 
{ 
	send(sockfd,"!error!",8,0); 
	printf("Wrong file name!\n"); 
	return 0; 
} 

send(sockfd,filename,20,0); 

int size;


printf("Now ransproting...\n"); 



recv(sockfd,buf,MAXDATASIZE,0); 
if(strcmp(buf,"transport ready")!=0) 
{ 
	printf("Server: transport error!\n"); 
	fclose(fp);
	return 0;
} 

while(!feof(fp)) 
{ 
	fread(buf,MAXDATASIZE,1,fp); 
	send(sockfd,buf,MAXDATASIZE,0);	
} 
send(sockfd,"!file! !end!",13,0); 
printf("File transprot OK\n"); 
fclose(fp); 

} 
/***********ls***************/
ls(int sockfd,char *buf)
{
	printf ("%s",buf);
	strcpy(buf,"");
	printf ("%s",buf);
	recv(sockfd,buf,MAXDATASIZE,0);
	if(strncmp(buf,"can't ls your file",18)==0)
		{
			printf("Server: %s\n",buf);
			return 0;
			}
			printf("%s",buf);
			while(!EOF)
			{
				read(sockfd,buf,MAXDATASIZE);
				printf("%s",buf);
				}
	
	}
	
/****************query********************/
f_query(int sockfd ,char *buf)
{
	printf("In quering...\n");
	read(sockfd,buf,MAXDATASIZE);
	printf("Server: %s",buf);
}
/****************result********************/
f_result(int sockfd ,char *buf)
{
	read(sockfd,buf,MAXDATASIZE);
	printf("Server: %s",buf);

	read(sockfd,buf,MAXDATASIZE);
	while((strcmp(buf,"!All !have! !sended!"))!=0)
	{
		printf("%s",buf);
		read(sockfd,buf,MAXDATASIZE);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -