目前位置:我的異常網» 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不是跨程序對象吧。
文章評論