免费注册 查看新帖 |

Chinaunix

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

[C++] 求助:跨LINUX和WINDOWS的TCP/IP通信 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-19 22:13 |只看该作者 |倒序浏览
本帖最后由 chenrychan 于 2015-08-19 22:16 编辑

     各位大神好!
     本人刚开始接触LINUX编程,现打算用两台计算机进行TCP/IP通信:其中一台(LINUX 2.6.3作为服务端,另一台(WINDOWS XP)作为客户端,但客户端始终无法CONNECT上服务端。请各位大神帮忙看看是否代码有误,或者是不是LINUX系统还有什么配置需要设置。
     PS:1、两台计算机的IP分别为192.168.0.2(LINUX)和192.168.0.5(WINDOWS)且能相互PING通;
          2、因为有多余的XP计算机,所以做了WINDOWS下的TCP/IP通信实验,两台XP计算机能正常通信,所以WINDOWS版的客户端程序应该没有问题。

我是分割线

LINUX下的服务端程序如下:

#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>

using namespace std;

int main()
{
        fd_set fs_read;
        int sockfd, new_fd, nn;
        struct sockaddr_in server_addr;
        struct sockaddr_in client_addr;
        int sin_size, portnumber;
        char hello[]="Hello!";
        char RBuff[2048];
       
        if((sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1)
        {
                cout<<"Socket err:"<<strerror(errno)<<endl;
                return 0;
        }

        bzero(&server_addr, sizeof(struct sockaddr_in));
        server_addr.sin_family = AF_INET;
        server_addr.sin_addr.s_addr = INADDR_ANY;
        server_addr.sin_port = htons(9527);

        if(bind(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr))==-1)
        {
                cout<<"Bind err:"<<strerror(errno)<<endl;
                return 0;
        }

        if(listen(sockfd, 10)==-1)
        {
                cout<<"Listen err:"<<strerror(errno)<<endl;
                return 0;
        }

       
        socklen_t len;
        len = sizeof(client_addr);
        sin_size = sizeof(struct sockaddr);//(struct sockaddr *)(&client_addr), &sin_size)
        cout<<"Accept CC"<<endl;
        if((new_fd=accept(sockfd, (struct sockaddr *)(&client_addr), &len))==-1)
        {
                cout<<"Accept err:"<<strerror(errno)<<endl;
                return 0;
        }
        cout<<new_fd<<endl;
        cout<<"Accept ZS"<<endl;
       
        close(new_fd);
        close(sockfd);
        return 0;
       
}


我是分割线

WINDOWS下的客户端程序如下:

#include <stdio.h>
#include <Winsock.h>
#include <errno.h>
int main()
{
        WORD wVersionRequested;
        WSADATA wsaData;
        int err;
       
        wVersionRequested=MAKEWORD(1,1);
        err=WSAStartup(wVersionRequested,&wsaData);
        if (err!=0)
        {
                return FALSE;
        }
        if (LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
        {
                WSACleanup();
                return FALSE;
        }
        SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
        SOCKADDR_IN addrSrv;
        memset(&addrSrv,0,sizeof(addrSrv));
        addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.0.2";
        addrSrv.sin_family=AF_INET;
        addrSrv.sin_port=htons(9527);
       
        if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))==-1)
        {
                printf("%s\n",strerror(errno));               
        }       
        closesocket(sockClient);
        WSACleanup();
        return FALSE;
}


我是分割线

LINUX系统的ifconfig结果如下图

LINUX系统的netstat -anp结果如下图


纠结好几天了,拜托各位大神了。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
2 [报告]
发表于 2015-08-19 22:20 |只看该作者
你先试试telnet能不能连到你自己写的server上面。

在看看中间的防火墙啥,看看数据包卡在哪里,还可以用tcpdump看看。

nmap也是个不错的工具,不过我不知道有没有Windows版的。

总之就是尽可能多的获取信息,然后找到出错的地方。

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
3 [报告]
发表于 2015-08-20 10:23 |只看该作者
iptables -F 清一下iptables
或者直接关掉 service iptables stop

论坛徽章:
0
4 [报告]
发表于 2015-08-20 16:51 |只看该作者
windows 和 linux 的防火墙都看看

论坛徽章:
0
5 [报告]
发表于 2015-08-20 22:37 |只看该作者
本帖最后由 chenrychan 于 2015-08-20 22:38 编辑

问题解决了,确实是linux防火墙的问题,关掉INPUT规则就可以了,感谢各位了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP