加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

传输端点未连接recv套接字

发布时间:2020-12-16 03:19:11 所属栏目:百科 来源:网络整理
导读:我做了一个简单的程序,将一个字符串从小写改为大写,从大写改为小写. 服务器工作直到启动客户端后,客户端运行服务器发出此错误: “recv server fallita:传输端点未连接” 为什么?我认为流关闭太快了吗? 下面有代码服务器: #include stdlib.h #include st
我做了一个简单的程序,将一个字符串从小写改为大写,从大写改为小写.
服务器工作直到启动客户端后,客户端运行服务器发出此错误:
“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 connessionen");
                    send(fd,"Benvenuto al maiuscolatore,minuscolatoren",27,0);
                    maiuscolatore(fd,fd);
                    printf("Chiusa connessionen");
            }
        }
            else if (c=='-'){
            switch(fork()){
                case -1:
                    perror("Fork fallita");
                    exit(4);
                case 0:
                    printf("Aperta connessionen");
                    send(fd,0);
                    minuscolatore(fd,fd);
                    printf("Chiusa connessionen");
            }   
            }
        }
        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]='';
        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: %sn",buf);
        }
        else{
            perror("seconda receive fallita");
            exit(3);
        }
        close(sockfd);
        exit(0);
    }

解决方法

从你的接受的fd是recv的文件句柄,而不是sock

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读