免费注册 查看新帖 |

Chinaunix

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

Linux与Windows网络编程通讯问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-27 15:43 |只看该作者 |倒序浏览
代码如下:
这个是Linux下写的服务器端程序:
int main (int argc, char *argv[])
{
        int i;
        for (i = 0; i < MAX_COUNT; i++)
                a_sock = -1;
        l_sock = socket (AF_INET, SOCK_STREAM, 0);
        sock_addr.sin_family = AF_INET;
        sock_addr.sin_port = htons (L_PORT);
        sock_addr.sin_addr.s_addr = htonl (INADDR_ANY);
        if (bind (l_sock, (struct sockaddr *)&sock_addr, sizeof (sock_addr)) < 0)
        {
                close (l_sock);
                printf ("can not bind!\n");
                return 0;
        }
        if (listen (l_sock, 5) != 0)
        {
                close (l_sock);
                printf ("can not listen!\n");
                return 0;
        }
       
        while (1)
        {
                int sock_count = getcount ();
                int sock_len = sizeof (sock_addr);
                if ((a_sock[sock_count] = accept (l_sock, (struct sockaddr *)&sock_addr, &sock_len)) < 0)
                {
                        close (l_sock);
                        printf ("can not accept!\n");
                        return 0;
                }
                printf ("accept success!\n");
                if ((fork ()) == 0)
                {
                        int pid = getpid ();
                        close (l_sock);
                }                       
        }
       
        return 0;
}

程序编译和运行都正常的,在监听状态


这个是windows下的客户端程序:(其他没关联部分我都省略了)
           m_cSock = socket (AF_INET, SOCK_STREAM, 0);

        m_cAddr.sin_addr.S_un.S_addr = htonl (inet_addr (s_IP));
        m_cAddr.sin_family = AF_INET;
        m_cAddr.sin_port = htons (atoi (s_Port));

        if (connect (m_cSock, (sockaddr *)&m_cAddr, sizeof (m_cAddr)))
        {
                AfxMessageBox ("can not connect");
                return;
        }
        SetWindowText ("已经连接上");



但是windows的connect一直连不上linux
我后来分别写了linux的客户端和windos的服务器端进行测试,结果同样操作系统下面都是能连接成功的

但是如果是windows与linux连接就不行,这是为什么?
代码哪部分存在问题吗?
防火墙我已经关闭了的。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-09-27 18:47 |只看该作者
代码用 [code][/code] 扩起来吧.

论坛徽章:
0
3 [报告]
发表于 2007-09-28 11:50 |只看该作者
1.  网络本身连不上 (楼主应该不会这么弱智)
2.  地址有误
也只能就这俩问题了。

论坛徽章:
0
4 [报告]
发表于 2007-09-28 12:12 |只看该作者
我最近也在搞这方面的东西,你在客户端有没有设置套接字协商和版本的代码。没有的话,试试加入以下代码
WORD wVersionRequested;
WSADATA wsaData;
//        int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
return 0;
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{WSACleanup();
return 0;}
再在代码结尾处加上
WSACleanup();

论坛徽章:
0
5 [报告]
发表于 2007-09-28 18:54 |只看该作者
按照楼上的说法,我将你那段代码加入了开头
在末尾加了WSACleanup()
但是还是不行
我都郁闷死了
我今天试了一下Linux做客户端,Windows做服务器
结果两者成功连接
但是为什么反过来就是不行呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP