文件传输后无法使用套接字-C套接字

文件传输后无法使用套接字-C套接字,c,sockets,C,Sockets,在这里,我先发送文件名,然后分块发送文件,然后尝试读取接收到的消息,但它只是冻结。没有回应。但在循环之后,如果我关闭WRshutdown(connfd,shutu\WR)工作正常。虽然我应该能够再次发送消息,但如果我这样做,我就不能那样做。 客户端.C write(sockfd, fname,100); FILE *fp = fopen(fname,"rb"); if(fp==NULL) { printf("File

在这里,我先发送文件名,然后分块发送文件,然后尝试读取接收到的消息,但它只是冻结。没有回应。但在循环之后,如果我关闭WR
shutdown(connfd,shutu\WR)工作正常。虽然我应该能够再次发送消息,但如果我这样做,我就不能那样做。
客户端.C

    write(sockfd, fname,100);

    FILE *fp = fopen(fname,"rb");
    if(fp==NULL)
    {
        printf("File opern error");
        exit(1);   
    }   

   
    int hi = 0;
   
    while(1)
    {
        /* First read file in chunks of 256 bytes */
        unsigned char buff[1024]={0};
        int nread = fread(buff,1,1024,fp);
            

        /* If read was success, send data. */
        if(nread > 0)
        {
            hi++;
            //printf("Sending \n");
            write(sockfd, buff, nread);
        }
        if (nread < 1024)
        {
            if (feof(fp))
    {
        printf("File transfer completed!\n");
    }
            if (ferror(fp))
                printf("Error reading\n");
            break;
        }
      
    }
    
    char fname2[100];
    // cant read
    read(sockfd, fname2, 100);
    printf("File Name: %s\n",fname2);
FILE *fp;
int bytesReceived = 0;
char recvBuff[1024];
char fname[100];
char fname2[100];
read(newsockfd, fname, 100);
//strcat(fname,"AK");
printf("File Name: %s\n",fname);
printf("Receiving file...");
fp = fopen(fname, "ab"); 
    if(NULL == fp)
    {
     printf("Error opening file");
    }

long double sz=1;
/* Receive data in chunks of 256 bytes */
   
    printf("\nCompleted.\n");
    int hi = 0;
   
    while((bytesReceived = read(newsockfd, recvBuff, 1024)) > 0)
 { 
     hi++;
     sz++; 
         fwrite(recvBuff, 1,bytesReceived,fp);
     }
     printf("Not pring this this!");

    if(bytesReceived < 0)
     {
        printf("\n Read Error \n");
     }
    
     
  
     write(newsockfd, "SayGee",100);
    
write(sockfd,fname,100);
文件*fp=fopen(fname,“rb”);
如果(fp==NULL)
{
printf(“文件操作错误”);
出口(1);
}   
inthi=0;
而(1)
{
/*第一次读取256字节的文件块*/
无符号字符buff[1024]={0};
int nread=fread(buff,11024,fp);
/*如果读取成功,则发送数据*/
如果(nread>0)
{
hi++;
//printf(“发送”);
写入(sockfd、buff、nread);
}
如果(nread<1024)
{
if(feof(fp))
{
printf(“文件传输完成!\n”);
}
if(费罗(fp))
printf(“错误读取\n”);
打破
}
}
char-fname2[100];
//不识字
读取(sockfd,fname2100);
printf(“文件名:%s\n”,fname2);
SERVER.C

    write(sockfd, fname,100);

    FILE *fp = fopen(fname,"rb");
    if(fp==NULL)
    {
        printf("File opern error");
        exit(1);   
    }   

   
    int hi = 0;
   
    while(1)
    {
        /* First read file in chunks of 256 bytes */
        unsigned char buff[1024]={0};
        int nread = fread(buff,1,1024,fp);
            

        /* If read was success, send data. */
        if(nread > 0)
        {
            hi++;
            //printf("Sending \n");
            write(sockfd, buff, nread);
        }
        if (nread < 1024)
        {
            if (feof(fp))
    {
        printf("File transfer completed!\n");
    }
            if (ferror(fp))
                printf("Error reading\n");
            break;
        }
      
    }
    
    char fname2[100];
    // cant read
    read(sockfd, fname2, 100);
    printf("File Name: %s\n",fname2);
FILE *fp;
int bytesReceived = 0;
char recvBuff[1024];
char fname[100];
char fname2[100];
read(newsockfd, fname, 100);
//strcat(fname,"AK");
printf("File Name: %s\n",fname);
printf("Receiving file...");
fp = fopen(fname, "ab"); 
    if(NULL == fp)
    {
     printf("Error opening file");
    }

long double sz=1;
/* Receive data in chunks of 256 bytes */
   
    printf("\nCompleted.\n");
    int hi = 0;
   
    while((bytesReceived = read(newsockfd, recvBuff, 1024)) > 0)
 { 
     hi++;
     sz++; 
         fwrite(recvBuff, 1,bytesReceived,fp);
     }
     printf("Not pring this this!");

    if(bytesReceived < 0)
     {
        printf("\n Read Error \n");
     }
    
     
  
     write(newsockfd, "SayGee",100);
    
文件*fp;
int字节数=0;
char recvBuff[1024];
char-fname[100];
char-fname2[100];
阅读(newsockfd,fname,100);
//strcat(fname,“AK”);
printf(“文件名:%s\n”,fname);
printf(“接收文件…”);
fp=fopen(fname,“ab”);
if(NULL==fp)
{
printf(“打开文件时出错”);
}
长双sz=1;
/*接收256字节的数据块*/
printf(“\n已完成。\n”);
inthi=0;
而((bytesReceived=read(newsockfd,recvBuff,1024))>0)
{ 
hi++;
sz++;
fwrite(recvBuff,1,字节接收,fp);
}
printf(“不要弹这个!”;
如果(字节数小于0)
{
printf(“\n读取错误\n”);
}
写作(newsockfd,“SayGee”,100);

我必须发送文件的大小,然后从循环的另一端进行检查。它陷入僵局,我找到了解决办法。谢谢你

请添加一个编译示例。并修复压痕。