免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1802 | 回复: 5
打印 上一主题 下一主题

很奇怪的connect问题,对方没有listen,connect正常返回 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-07 11:14 |只看该作者 |倒序浏览
int report_i_am_alive(struct sockaddr_in toaddr)
{
    int i,sd,n;
    char buf[16];
    strncpy(buf,"ABCDEFGHIJ",10);
    sd = socket(PF_INET, SOCK_STREAM, 0);
    if (sd < 0) {
                fprintf(stderr, "socket creation failed\n");
                return -1;
        }
           fprintf(stderr,"toaddr ip: %s,port %d\n",inet_ntoa(toaddr.sin_addr),ntohs(toaddr.sin_port));

        if (connect(sd, (struct sockaddr *)&toaddr, sizeof(toaddr)) < 0) {
                fprintf(stderr,"connect failed\n");
                return -1;
        }

        fprintf(stderr,"connect ok, begin send. sd=%d\n",sd);

int main()
{
......
    report_i_am_alive(toaddr);
}

就子函数里connect那一句。
前面fprintf打印出来的 toaddr ip: 192.168.0.151,port 6002,
无论赋值哪个IP,connect都返回成功!

论坛徽章:
0
2 [报告]
发表于 2006-04-07 11:43 |只看该作者
#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>

int report_i_am_alive(struct sockaddr_in toaddr)
{
    int i,sd,n;
    char buf[16];
    strncpy(buf,"ABCDEFGHIJ",10);
    sd = socket(AF_INET, SOCK_STREAM, 0);
    if (sd < 0) {
                fprintf(stderr, "socket creation failed\n");
                return -1;
    }
   
   fprintf(stderr,"toaddr ip: %s,port %d\n",inet_ntoa(toaddr.sin_addr),ntohs(toaddr.sin_port));       

    if (connect(sd, (struct sockaddr *)&toaddr, sizeof(toaddr)) < 0) {
                fprintf(stderr,"connect failed\n");
                return -1;
     }

    fprintf(stderr,"connect ok, begin send. sd=%d\n",sd);

}

int main(int argc, char **argv)
{
        struct sockaddr_in toaddr;

        bzero(&toaddr, sizeof(toaddr));
        toaddr.sin_family = AF_INET;
        toaddr.sin_port = htons(atoi(argv[2]));
        if (inet_pton(AF_INET, argv[1], &toaddr.sin_addr) < 0)
                printf("error\n");


       
            report_i_am_alive(toaddr);
}

论坛徽章:
0
3 [报告]
发表于 2006-04-07 11:58 |只看该作者
你是说没有accept() 还是 listen()

论坛徽章:
0
4 [报告]
发表于 2006-04-07 12:15 |只看该作者
◎rwen2012:
在main函数里的前面赋值部分我已经做过了。
因为在子函数里,connect之前,我打印了该结构里的信息,
fprintf(stderr,"toaddr ip: %s,port %d\n",inet_ntoa(toaddr.sin_addr),ntohs(toaddr.sin_port));

◎banboo2004
另外的机器根本不存在,当然也就连listen也不存在了,例如我把toaddr里的ip设置为192.168.0.151不存在的机器,connect仍然返回0。

[ 本帖最后由 archphoenix 于 2006-4-7 13:12 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-04-07 16:42 |只看该作者
[Rwen2012@rwen test]$ ./a.out 219.216.106.38 5
toaddr ip: 219.216.106.38,port 5
connect failed
[Rwen2012@rwen test]$ ./a.out 219.216.106.38 23
toaddr ip: 219.216.106.38,port 23
connect ok, begin send. sd=3
[Rwen2012@rwen test]$

论坛徽章:
0
6 [报告]
发表于 2006-04-07 17:44 |只看该作者
非常感谢! 原来我少一句:
     toaddr.sin_family = AF_INET;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP