传输端点未连接recv套接字

前端之家收集整理的这篇文章主要介绍了传输端点未连接recv套接字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我做了一个简单的程序,将一个字符串从小写改为大写,从大写改为小写.
服务器工作直到启动客户端后,客户端运行服务器发出此错误
“recv server fallita:传输端点未连接”
为什么?我认为流关闭太快了吗?
下面有代码服务器:
#include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <ctype.h>
    #include <sys/socket.h>
    #include <string.h>
    #include <netinet/in.h>
    #define MAXLENGTH 80
    #define SERVERPORT 1313


    void minuscolatore (int in,int out){
        char inputline[MAXLENGTH];
        int len,i;
        while((len=recv(in,inputline,MAXLENGTH,0))>0){
            for(i=0;i<len;i++){
                inputline[i]=tolower(inputline[i]);
            }
            if (strcmp(inputline,"fine")==0){
                break;
            }
            send(out,len,0);
        }
    }
    void maiuscolatore(int in,0))>0){
            for(i=0;i<len;i++){
                inputline[i]=toupper(inputline[i]);
            }
            if (strcmp(inputline,"FINE")==0){
                break;
            }
            send(out,0);
        }
    }
    int main(){
        int sock,client_len,fd;
        char c;
        struct sockaddr_in client,server = {AF_INET,htons(SERVERPORT),INADDR_ANY};
        if((sock=socket(AF_INET,SOCK_STREAM,0))==-1){
            perror("Socket fallita");
            exit(1);
        }
        if(bind(sock,(struct sockaddr *)&server,sizeof server)==-1){
            perror("Bind fallita");
            exit(2);
        }
        listen(sock,5);
        while(1){
            client_len=sizeof(client);
            if((fd=accept(sock,(struct sockaddr *)&client,&client_len))<0){
                perror("accept fallita");
                exit(3);
            }
            if (recv(sock,&c,1,0)==-1){
                perror("recv server fallita");
                exit(4);
            }
            if (c=='+'){
            switch(fork()){
                case -1:
                    perror("Fork fallita");
                    exit(4);
                case 0:
                    printf("Aperta connessione\n");
                    send(fd,"Benvenuto al maiuscolatore,minuscolatore\n",27,0);
                    maiuscolatore(fd,fd);
                    printf("Chiusa connessione\n");
            }
        }
            else if (c=='-'){
            switch(fork()){
                case -1:
                    perror("Fork fallita");
                    exit(4);
                case 0:
                    printf("Aperta connessione\n");
                    send(fd,0);
                    minuscolatore(fd,fd);
                    printf("Chiusa connessione\n");
            }   
            }
        }
        close(fd);
    }

客户后:

#include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <ctype.h>
    #include <sys/socket.h>
    #include <string.h>
    #include <netinet/in.h>
    #define MAXLENGTH 80
    #define SERVERPORT 1313

    int main(){
        int sockfd;
        struct sockaddr_in server={AF_INET,INADDR_ANY};
        int i=0,len;
        char buf[MAXLENGTH],c,d;
        if ((sockfd=socket(AF_INET,0))==-1){
            perror("socket fallita");
            exit(1);
        }
        if (connect(sockfd,(struct sockaddr *) &server,sizeof server)==-1){
            perror("connect fallita");
            exit(2);
        }
        printf("\nDigita una stringa :");
        while((c=getchar())!='\n' && i<MAXLENGTH)
            buf[i++]=c;

        buf[i]='\0';
        len=strlen(buf);
        printf("\nScrivi + se vuoi tutto maiuscolo e - se vuoi tutto minuscolo:");
        d=getchar();
        if (send(sockfd,&d,0)==-1){
            perror("send d fallita");
            exit(4);
        }
        printf("\nInvio la stringa al server...\n");
        if(send(sockfd,buf,0)==-1){
            perror("send fallita");
            exit(4);
        }
        if(recv(sockfd,0)>0){
            printf("Ho ricevuto la risposta: %s\n",buf);
        }
        else{
            perror("seconda receive fallita");
            exit(3);
        }
        close(sockfd);
        exit(0);
    }

解决方法

从你的接受的fd是recv的文件句柄,而不是sock
原文链接:https://www.f2er.com/c/111846.html

猜你在找的C&C++相关文章