请问socket创建失败的有关问题

请教socket创建失败的问题
本帖最后由 dzup7415693 于 2015-09-01 21:57:56 编辑
小弟是菜鸟一枚,刚接触socket,可在server运行时socket总是创建失败,代码如下:Server:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<errno.h>
#include<netinet/in.h>
#include<string.h>
#define backlog 1024
#define MAX_DATA_SIZE 12
#define server_port 3333

int main()
{
    struct sockaddr_in server_sockaddr,client_sockaddr;
    int sockfd,client_sockfd,receve_bytes;
    int sin_size;    
    char buf[MAX_DATA_SIZE];
    memset(buf,0,MAX_DATA_SIZE);
    
    if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1);
      {
          perror("socket");
          printf("create socket error...%s\n",strerror(errno));
          exit(1);
      }

     printf("create socket success! socketfd:%d\n",sockfd);

     server_sockaddr.sin_family  = AF_INET;
    server_sockaddr.sin_port =htons( server_port);
    server_sockaddr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(server_sockaddr.sin_zero),8);


      if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr)) == -1)
      {
          perror("bind");
          exit(1);
      }
      printf("bind success\n");

     if(listen(sockfd,backlog) == -1)

    {
         perror("listen");
         exit(1);
    }
 
    printf("listening...\n");

    if((client_sockfd = accept(sockfd,(struct sockaddr*)&client_sockaddr,&sin_size)) == -1)
    {
        perror("accept");
        exit(1);
    }


    if((receve_bytes = recv(client_sockfd,buf,MAX_DATA_SIZE,0)) == -1)
    {
        perror("recv");
        exit(1);
    }


   printf("recv a connection\n");

   close(sockfd);
   return 0;
}   
    

     


client:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#define SERVPORT 3333
#define MAXDATASIZE 100

int main(int argc,char*argv[])
{
int socketfd, sendbytes;
struct sockaddr_in cli_sockaddr;

char buf[MAXDATASIZE];
memset(buf,0,MAXDATASIZE);
struct hostent *host;
struct sockaddr_in serv_addr;

    if((socketfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket");
exit(1);
}
        printf("create client socket success\n");
if(argc < 2)
    {
      fprintf(stderr,"Please enter the server's hostname!\n");
      exit(1);
    }
    
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(3333);
bzero(&(serv_addr.sin_zero),8);


 if((host=gethostbyname(argv[1])) == NULL)
        {
            perror("gethostbyname error!");
             exit(1);
         }
 serv_addr.sin_addr=*((struct in_addr *)host->h_addr);

        printf("connect up\n");
if((connect(socketfd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr))) == -1)
{
            perror("connect");
            exit(1);
         }

if(send(socketfd,"hello",5,0) == -1)
        {
            perror("send");
            exit(1);
        }
close(socketfd);
    return 0;
}


运行server显示这样:
请问socket创建失败的有关问题
运行client显示这样:
请问socket创建失败的有关问题
不知道为什么server端创建socket失败,请大神指教!
------解决思路----------------------
server创建成功了啊,只是没有循环坚挺端口,直接退出了,加个while循环
------解决思路----------------------
服务器代码第一个if括号后面;去掉
------解决思路----------------------
引用:
服务器代码第一个if括号后面;去掉


引用:
为什么要加while循环呢?while循环有什么用呢?


2L正解
------解决思路----------------------
引用:
上面的程序能够运行了,我又想让服务器发送客户端的IP地址到客户端,在服务器添加代码:
char sendbuf[100];
   memset(sendbuf,0,100);
   
   sprintf(sendbuf,"%s",inet_ntoa(client_sockaddr.sin_addr));

   if(send(client_sockfd,sendbuf,101,0) == -1)
   {
            perror("send");
            exit(1);
   }

在客户端添加代码:
	if((recv(socketfd,buf,101,0)) == -1)
       {
        perror("recv");
        exit(1);
       }
  
       printf("client recv:%s\n",buf);


可服务器端显示:Segmentation fault(core dumped)
客户端显示:client recv:
也就是没有收到信息


你服务器都core掉了,你怎么可能收到消息。。