我的服務器出現問題。他無法將基本信息發送給客戶。 我認爲這個問題是在客戶端,因爲他不能接收發送郵件,但我不知道如何解決這個問題:/通過套接字進行C服務器 - 客戶端通信 - 如何將消息從服務器打印到客戶端
我的服務器:
int server(){
int lis_soc,s,r;
struct sockaddr_un ad;
char buffer[MAXSIZE];
lis_soc=socket(AF_UNIX,SOCK_STREAM,0);
memset(&ad,0,sizeof(ad));
ad.sun_family=AF_UNIX;
strcpy(ad.sun_path,"./sock");
unlink("./sock");
bind(lis_soc,(struct sockaddr *) &ad,sizeof(ad));
listen(lis_soc,10);
s=accept(lis_soc,0,0);
while(strcmp(buffer,"halt")!=0 && strcmp(buffer,"quit")!=0){
char *pch=(char *)malloc(MAXSIZE);
bzero(buffer,MAXSIZE);
r=read(s,buffer,sizeof(buffer));
strcpy(pch,buffer);
strtok(pch," ");
if(strcmp(buffer,"help")==0) get_help(s); //this is the funcion for print from server
else if(strcmp(buffer,"info")==0) get_info();
else if(strcmp(buffer,"run")==0) run();
else if(strcmp(pch,"ls")==0){
if(strcmp(buffer,"ls")==0) ls(".",NULL);
else while ((pch = strtok (NULL, " ")) != NULL) {ls(pch,NULL);}
}
else system(buffer);
}
close(s);
printf("SERVER END OF CONNECTION\n");
return 0;
}
我的客戶:
int client(){
int s,r;
char buffer[MAXSIZE];
char output[]="client: Enter data for server: ";
struct sockaddr_un ad;
s=socket(AF_UNIX,SOCK_STREAM,0);
memset(&ad,0,sizeof(ad));
ad.sun_family=AF_UNIX;
strcpy(ad.sun_path,"./sock");
connect(s,(struct sockaddr *) &ad,sizeof(ad));
while(strcmp(buffer,"halt")!=0 && strcmp(buffer,"quit")!=0){
bzero(buffer,MAXSIZE);
write(1,output,strlen(output));
r=read(0,buffer,sizeof(buffer));
buffer[r-1]='\0';
write(s,buffer,strlen(buffer));
}
close(s);
printf("CLIENT END OF CONNECTION\n");
return 0;
}
功能get_help()從服務器調用:
void get_help(int lis_soc){
char buffer[]="Ahoj client";
write(lis_soc,&buffer,strlen(buffer));
}
函數調用後獲得幫助沒有打印。爲什麼?
你必須完全,正確處理結果返回所有的系統調用,如「連接()」和「閱讀()」。 – ThingyWotsit
我正確編輯了我的代碼,但沒有發生任何錯誤,所有事情都正常運行。 – user3396072