gpt4 book ai didi

c - 传输端点未连接 recv 套接字

转载 作者:太空狗 更新时间:2023-10-29 16:46:02 25 4
gpt4 key购买 nike

我编写了一个简单的程序,可以将字符串从小写更改为大写,然后从大写更改为小写。服务器一直工作到启动客户端,客户端运行服务器后出现此错误:“接收服务器 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,inputline,len,0);
}
}
void maiuscolatore(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]=toupper(inputline[i]);
}
if (strcmp(inputline,"FINE")==0){
break;
}
send(out,inputline,len,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,"Benvenuto al maiuscolatore, minuscolatore\n",27,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,htons(SERVERPORT),INADDR_ANY};
int i=0, len;
char buf[MAXLENGTH],c,d;
if ((sockfd=socket(AF_INET,SOCK_STREAM,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,1,0)==-1){
perror("send d fallita");
exit(4);
}
printf("\nInvio la stringa al server...\n");
if(send(sockfd,buf,len,0)==-1){
perror("send fallita");
exit(4);
}
if(recv(sockfd,buf,len,0)>0){
printf("Ho ricevuto la risposta: %s\n",buf);
}
else{
perror("seconda receive fallita");
exit(3);
}
close(sockfd);
exit(0);
}

最佳答案

accept 中的 fdrecv 的文件句柄,而不是 sock

关于c - 传输端点未连接 recv 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8760701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com