- 论坛徽章:
- 0
|
SERVER:
循环部分:
while (1) //服务器端要一直运行
{
//定义客户端的socket地址结构client_addr
//接受一个到server_socket代表的socket的一个连接
//如果没有连接请求,就等待到有连接请求--这是accept函数的特性
//accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信
//new_server_socket代表了服务器和客户端之间的一个通信通道
//accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中
socklen_t length = sizeof(client_addr);
int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);
if ( new_server_socket < 0)
{
printf("Server Accept Failed!\n");
// break;
}
if(!fork()){
bzero(buffer, BUFFER_SIZE);
length = recv(new_server_socket,buffer,BUFFER_SIZE,0);
if (length < 0)
{
printf("Server Recieve Data Failed!\n");
// break;
}
char user_cmd[CMD_ARG+1];
bzero(user_cmd,CMD_ARG+1);
strncpy(user_cmd,buffer,strlen(buffer));
if(strcmp(user_cmd,"get")==0)
{cmd_put(server_socket,new_server_socket);}
else if(strcmp(user_cmd,"put")==0)
{cmd_get(server_socket,new_server_socket);}
else
{
printf("Cannot Reply The Command");
}
}
close(new_server_socket);
waitpid(-1,NULL,WNOHANG);
//关闭与客户端的连接
}
close(server_socket);
exit(0);
//关闭监听用的socket
}
CLIENT:
循环部分:
while(1)
{ printf("Please Input Command:\t");
scanf("%s", cmd_arg);
if(strcmp(cmd_arg,"get")==0)
{
send(client_socket,cmd_arg,CMD_ARG,0);
cmd_get(client_socket);
}
else if(strcmp(cmd_arg,"put")==0)
{
send(client_socket,cmd_arg,CMD_ARG,0);
cmd_put(client_socket);
}
else
{
printf("Command error\n\n");
}
}
//关闭socket
close(client_socket);
return 0;
}
实现了文件的上传跟下载,现在的问题是:上面的服务器代码,我只要传一个文件,成功之后,再下载或则上传一个,就会出现“断开的管道”。我不知道是不是我的服务器代码有误,哪个地方被我关了,反复测试反复修改 出现不同的问题,我以为是服务器中的new_server_socket被关了,我就把 close(new_server_socket) 去掉。不关闭它,结果出现的情况是:客户端get一个,输入文件名..然后...阻塞了 ... 按ctrl+c,服务器显示传送成功,客户端也收到了那文件,再次运行客户端,同样的都是那个情况。不知道是我哪部分出错了,请高人指点,修改了非常多次了 找不到答案 |
|