• 4495阅读
  • 1回复

qt调试 结构体数据监视 [复制链接]

上一主题 下一主题
离线蠢蠢欲懂
 
只看楼主 倒序阅读 楼主  发表于: 2012-03-10
  1. #include <stdio.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <sys/types.h>
  5. #include <stdlib.h>
  6. #include <arpa/inet.h>
  7. #include <strings.h>
  8. void disp_addrcont(struct sockaddr_in *addr)
  9. {
  10.     printf("std:%d,sin_family:%d\r\n",AF_INET,addr->sin_family);
  11.     if (addr->sin_family!=AF_INET)
  12.     {
  13.         perror("Not an Internet socket\r\n");
  14.         return ;
  15.     }
  16.     printf("address is:%s:%d\r\n",inet_ntoa(addr->sin_addr),htons(addr->sin_port));
  17.     fflush(stdout);
  18. }
  19. int main(int argc, char *argv[])
  20. {
  21.     int listenfd,connfd;
  22.     struct sockaddr_in servaddr,clientaddr,addr;
  23.     int clientaddrLen,addrLen;
  24.     if ((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
  25.     {
  26.         perror("socket error.\r\n");
  27.         exit(1);
  28.     }
  29.     bzero(&servaddr,sizeof(struct sockaddr_in));
  30.     servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
  31.     servaddr.sin_family=AF_INET;
  32.     servaddr.sin_port=htons(8080);
  33.     //设置端口号重用
  34.     int on;
  35.     on = 1;
  36.     int ret = setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );
  37.     if (bind(listenfd,(struct sockaddr*)&servaddr,sizeof(struct sockaddr_in))<0)
  38.     {
  39.         perror("bind error,port 8080.\r\n");
  40.         exit(1);
  41.     }
  42.     if (listen(listenfd,1)<0)
  43.     {
  44.         perror("listen error.\r\n");
  45.         exit(1);
  46.     }
  47.     for (;;)
  48.     {
  49.         connfd=accept(listenfd,(struct sockaddr*)&clientaddr,(socklen_t *)&clientaddrLen);
  50.         if (connfd<0)
  51.         {
  52.             perror("accept error.\r\n");
  53.             exit(1);
  54.         }
  55.         printf("accept returned client address:\r\n");
  56.         disp_addrcont(&clientaddr);
  57.         getpeername(connfd,(struct sockaddr*)&addr,(socklen_t *)&addrLen);
  58.         printf("getpeername returned client address:\r\n");
  59.         disp_addrcont(&addr);
  60.         getsockname(connfd,(struct sockaddr*)&addr,(socklen_t *)&addrLen);
  61.         printf("getsockname returned server address:\r\n");
  62.         disp_addrcont(&addr);
  63.     }
  64.     return 0;
  65. }
网络编程,测试getsockaddr和getpeeraddr函数,代码如上,有两个问题
1、第一次用telnet测试程序,得到的地址不是 AF_INET类型的,不关闭程序,继续telnet得到的地址确实AF_INET类型的了,不解
2、于是我调试,调试时发现不能查看addr,clientaddr,servaddr中的成员变量,显示为:<unavailable synchroneous data>。在网上也没有找到合适的解决方案,于是拿过来问问,希望高手赐教。
离线蠢蠢欲懂
只看该作者 1楼 发表于: 2012-03-12
自己顶
快速回复
限100 字节
 
上一个 下一个