|
楼主 |
发表于 2004-11-10 15:42:47
|
显示全部楼层
谢谢,文件传输我已经解决!!但是接收到的文件是显示在终端,而不是以filename保存下来的,也就是说在创建文件时出错了!!我现在想请教生成文件的方法!!
/*
* server.c
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
int port = 8000;
int main(int argc, char * argv[])
{
char c,buf[20480],file[30];
int fromlen,source;
int target;
char * strs=" \n Receiving file";
register int k,s,ns;
struct sockaddr_in sin;
s=socket(AF_INET,SOCK_STREAM,0);
if(s<0){
perror("Get SOCKET NO. !!!");
exit(3);
}
bzero(&sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = INADDR_ANY;
if(bind(s, (struct sockaddr *)&sin, sizeof(sin))<0){
perror("Band SOCKET NO.!!!");
close(s);
exit(4);
}
if(listen(s,5)<0) {
perror(" sever:listen");
exit(5);
}
printf(" %s",strs);
while(1) {
if((ns=accept(s, (struct sockaddr *)&sin, &fromlen))<0){
perror(" sever:accept");
exit(6);
}
while((k=read(ns,file,sizeof(file)) )<=0)
if((target=open(file,O_WRONLY|O_CREAT|O_TRUNC,0700))<0)
//虽然是O_CREAT,但并没生成文件
{
perror("Open file!!");
exit(4);
}
bzero(file,sizeof(file));
write(1,"filename:",9); //这儿应该得到文件名,但得到的却是文件内容(见下文)
while((k=read(ns,buf,sizeof(buf)))>0)
write(target,buf,k); //这句虽然是要写入文件,但并没能生成ilename的文件
printf("\n Received succeeded\n\n");
close(ns);
close(target);
}
}
运行结果:
[root@echo receive]# ./client file.c /向server传file.c文件
[root@echo receive]# ./server //得到显示在终端上的文件内容!
filename:#include <stdio.h> //这一行得到的应该是filename: file.c ,
#include <net/libftp.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#define NORMAL 0
#define ABNORMAL 1
#define ON 1
#define OFF 0
..........
Receiving file
Received success
敬请指教!急盼答复!!! |
|