求助,新手刚学socket编程,跟着网上的教程自己大概写了一下却总是段错误
求助,我是一名新手刚学socket编程,我跟着网上的教程自己大概写了一个简单的服务器端程序功能是等待连接,若有用户连接成功,就显示用户的ip与端口号,在kali linux2.0下用gcc编译通过,但运行时总显示段错误,我用gdb调试发现是显示用户ip时出的错误,但不知该如何改正,求这方面的高手指点我一下,谢谢。
代码如下:
#include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<netinet/in.h>
#define PORT 6666
#define SOCKRT_ERROR -1
#define INVALID_SOCKET -1
#define SOCK_ERROR -1
#define QUEUESIZE 5
int main()
{
int socket_server, socket_listen, socket_bind, socket_accept;
struct sockaddr_in myaddr;
struct sockaddr_in Client_addr;
int sockaddr_len;
IN_ADDR Cli;
memset(&myaddr, 0, sizeof(myaddr));
memset(&Client_addr, 0, sizeof(Client_addr));
myaddr.sin_family=AF_INET;
myaddr.sin_port=htons(PORT);
myaddr.sin_addr.s_addr=htonl(INADDR_ANY);//local first netcard
printf("Normal1.\n");
socket_server=socket(AF_INET,SOCK_STREAM,0);
if(socket_server==INVALID_SOCKET)
return ;
socket_bind=bind(socket_server,(struct sockaddr *)&myaddr,sizeof(myaddr));
if(socket_bind==SOCKRT_ERROR)
return ;
printf("Normal2.\n");
socket_listen=listen(socket_server,QUEUESIZE);
if(socket_listen==SOCK_ERROR)
return ;
socket_accept=accept(socket_server,(struct sockaddr *) &Client_addr, &sockaddr_len);
printf("Normal3.\n");
if(socket_accept==INVALID_SOCKET)
printf("INVALID_SOCKET");
memcpy(&Cli, &Client_addr.sin_addr.s_addr,4);
else
{
printf("The client's ip is %s\n",
inet_ntoa(Cli);
printf("The client's port is %s\n",
ntohs(Client_addr.sin_port));
}
printf("Normal4.\n");
printf("The program is over.\n");
close(socket_accept);
char ch=getchar();
}