设为首页 加入收藏

TOP

网络编程TCP总结及实践-C语言(五)
2015-07-24 05:39:08 来源: 作者: 【 】 浏览:23
Tags:网络编程 TCP 总结 实践 语言
d(fd_file,snd_msg.s_buf,MSG_SIZE))>0) { snd_msg.s_len=read_n;//保存每次读取的长度 send(fd_client,&snd_msg,snd_msg.s_len+MSG_LEN,0); } snd_msg.s_len=0; send(fd_client,&snd_msg,snd_msg.s_len+MSG_LEN,0); close(fd_file); close(fd_client); } return 0; }


#include "mysocket.h"
int main(int argc,char *argv[])
{
	if(argc!=3)
	{
		printf("too few argument!\n");
		exit(-1);
	}
	MSG msg,rcv_msg;//一个用于发送文件名。一个用于接受文件
	int fd_client,fd_file;
	struct sockaddr_in sever_addr;//保存服务器端信息
	if((fd_client=socket(AF_INET,SOCK_STREAM,0))==-1)
	{
		perror("socket");
		exit(-1);
	}
	memset(&sever_addr,0,sizeof(sever_addr));
	sever_addr.sin_family=AF_INET;
	sever_addr.sin_port=htons(atoi(argv[2]));
	sever_addr.sin_addr.s_addr=inet_addr(argv[1]);
	//建立与服务器的连接
	if(-1==connect(fd_client,(struct sockaddr *)&sever_addr,sizeof(sever_addr)))
	{
		perror("connect");
		close(fd_client);
		exit(-1);
	}
	//输入要下载的文件名
	memset(&msg,0,sizeof(msg));
	printf("input:");
	scanf("%s",msg.s_buf);       
	fd_file=open(msg.s_buf,O_WRONLY|O_CREAT,0666);//创建对应的文件
	msg.s_len=strlen(msg.s_buf);//发送文件名的长度
	send(fd_client,&msg,msg.s_len+MSG_LEN,0);
	//MSG_LEN表示int s_len的长度 msg.s_len存储的是文件名字符串的长度
	int total;
	while(1)
	{
		memset(&rcv_msg,0,sizeof(rcv_msg));//接受文件的结构体
		recv(fd_client,&rcv_msg,MSG_LEN,0);//先接收字符串长度。存储在rcv_msg.s_len
		total+=rcv_msg.s_len;
		system("clear");
		printf("downloading...%.2f kb\n",(double)total/1024);
		if(rcv_msg.s_len>0)
		{
		
		recv(fd_client,rcv_msg.s_buf,rcv_msg.s_len,0);
		write(fd_file,rcv_msg.s_buf,strlen(rcv_msg.s_buf));//写入文件中
		}
		else
		{
			break;
		}

	}
	close(fd_file);
	close(fd_client);

	return 0;
}






首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1014 Uniform Generator 题解 下一篇POJ 2488:A Knight's Journey

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: