天天看點

linux socket 多程序 伺服器,linux c 多程序的伺服器用戶端 socket operation on non-socket解決思路...

目前位置:我的異常網» C語言 » linux c 多程序的伺服器用戶端 socket operation on

linux c 多程序的伺服器用戶端 socket operation on non-socket解決思路

www.myexceptions.net  網友分享于:2015-08-26  浏覽:0次

linux c 多程序的伺服器用戶端 socket operation on non-socket

server.c:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include 

#include 

int main()

{

int client_sockfd,server_sockfd;

pid_t pid;

int client_len,server_len;

struct sockaddr_in client_add,server_add;

if((server_sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){//建立服務端socket

perror ("socket create fail");

exit (EXIT_FAILURE);

}

bzero(&server_add,sizeof(server_add));

server_add.sin_family = AF_INET;

server_add.sin_addr.s_addr = htonl(INADDR_ANY);

server_add.sin_port = htons(9734);

server_len = sizeof(server_add);

//測試時服務端和用戶端是在同一台機器上運作的,需使用setsockopt設定一下

//允許重複使用本地位址和套接字綁定

int j=1;

setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&j,sizeof(j));

if(bind(server_sockfd,(struct sockaddr *)&server_add,server_len) == -1){//給服務端套接字命名

perror ("bind fail");

exit (EXIT_FAILURE);

}

listen(server_sockfd,5);//建立連接配接隊列,開始等待客戶連接配接,隊列數為5

signal(SIGCHLD,SIG_IGN);//忽略sigchld信号避免産生僵屍程序

while(1)

{

printf("server waiting\n");

client_len = sizeof(client_add);

client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_sockfd,&client_len);

if(client_sockfd == -1)

{

perror("accept error:");

exit(1);

}

pid = fork();

if(pid == 0)

{

//沒對client_sockfd讀寫,隻是驗證下socket

close(client_sockfd);

exit(0);

}

else if(pid>0)

close(client_sockfd);

else{

perror("fork error");

exit(1);

}

}

}

client.c:

#include

#include

#include

#include

#include

#include

#include

#include

#include 

#include 

int main()

{

int socketfd,len,result;

struct sockaddr_in server_add;

if((socketfd = socket(AF_INET,SOCK_STREAM,0)) == -1)

{

perror ("socket create fail");

exit (EXIT_FAILURE);

}

bzero(&server_add,sizeof(server_add));

server_add.sin_family = AF_INET;

server_add.sin_addr.s_addr = inet_addr("127.0.0.1");

server_add.sin_port = htons(9734);

bzero(&(server_add.sin_zero),8) ;

len = sizeof(server_add);

result = connect(socketfd,(struct sockaddr *)&server_add,len);

if (result == -1) {

perror ("connect server fail");

exit (EXIT_FAILURE);

}

//同樣為對socketfd操作

close(socketfd);//良好的習慣,一個套接字使用完要關閉

exit (0);

}

為了代碼看起來更簡短,對打開的sokcetfd我都沒有去讀寫,原意是要發送接受檔案。

運作之後會出現socket operation on non-socket,網上說這個錯誤是=和==優先級問題,可我這份代碼并無這樣的問題,希望大神幫我下,卡一天了

------解決思路----------------------

socket不是跨程序對象吧。

文章評論