求助,新手刚学socket编程,跟着网上的教程自己大概写了一下却总是段错误

Q同学的nlp笔记 2016-09-21 10:14:05
求助,我是一名新手刚学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();
}
...全文
352 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
codingMozart 2016-09-22
  • 打赏
  • 举报
回复

sockaddr_len = sizeof(struct sockaddr_in);// accept的第三个参数是in/out类型的,必须先赋值
socket_accept=accept(socket_server,(struct sockaddr *) &Client_addr, &sockaddr_len);

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧