VC编写(server client)的代码能够成功连接
JAVA编写的(server client)也能够连接成功.但是VC和JAVA互连就是连不上,不知道什么原因,检查代码发现JAVA用的是UDP,而VC用TCP,
后来将JAVA也改成TCP,但是还是不能连接.
不知道什么原因?
请高手指点.//java代码 client
Socket socket=new Socket("192.168.0.1",5000,true);//根据JAVA文档,true是TCP,false是UDP//VC代码 server
m_sockaddr.sin_addr.s_addr=inet_addr(m_szIP);//htonl(INADDR_ANY);
m_sockaddr.sin_family=AF_INET;
m_sockaddr.sin_port=m_nPort;//htons(5000);
m_nAddlen=sizeof(m_sockaddr); m_sockServer=socket(AF_INET,SOCK_STREAM,0); bind(m_sockServer,(sockaddr*)&m_sockaddr,m_nAddlen))
accept(dlg->m_sockServer,(sockaddr*)&(dlg->m_sockaddr),&(dlg->m_nAddlen)

解决方案 »

  1.   

    你的代码似乎没有listen?
    java、VC建立TCP连接本身没甚么问题,因为它们必须使用相同的底层网络协议。但是java对象可以序列号再通过网络传输,这在VC端肯定是无法解析的,不知是否是java代码传了对象。
    另外,TCP和UDP相应的接收和发送函数是不同的,建议检查一下,是否java代码中存在这方面问题,因为你说java客户端原来是UDP的。或者写个java的TCP客户端测试一下。
      

  2.   

    最有可能发生的问题是:java和VC++的某些类型字节数不同。
    如果我没有记错的话JAVA中和C++中WORD的字节大小是不一样的,还有其它类型也是如此。
    因此这类跨平台的通信,强烈建议传输时以BYTE为单位进行传输(字节流的方式)。
    特别是VC不要用CSocket+CArchive+CSocketFile这类方式和java程序通信。
      

  3.   

    在java客户端Socket socket=new Socket("192.168.0.1",5000,true);就是建立连接。可是建立连接都有问题。这句代码报错:连接被拒绝
      

  4.   

    第一,你的服务器端m_nPort是否就是客户端要连接的端口htons(5000)?
    第二,你的服务器端m_sockServer=socket(AF_INET,SOCK_STREAM,0);错误,应该是
                      m_sockServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
      

  5.   

    已经改为:m_sockServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    现在错误变成连接超时,本来的错误是连接被拒绝.
      

  6.   

    你的服务器端m_nPort是否就是客户端要连接的端口htons(5000)?你在客户端用sniffer抓包,看连接的地址和端口是否正确,对方返回了什么。
    你在服务器端运行netstat -na ,看TCP的5000端口是否已经在监听。
    如果两者都是YES,那你看两台机器是否能ping通。
      

  7.   

    "softrain(敢笑杨过不痴情)"
     所说的情况多是正常的,可是就是不知道为什么连接不上.
      

  8.   

    找到问题了:
        m_sockaddr.sin_port=m_nPort;-------->改为htons(m_nPort)
    哈哈,比较弱智的一个问题,不好意思,自己很久才发现.
    后来又发生一个问题,连接成功后,发现VC发送给JAVA的数据收不到,搞了好久才发现,
       char* pData = sData.GetBuffer(sData.GetLength())
    而pData没有结束符号,JAVA那边是按行来接收的,所以,没有结束符号,就一直不能接收成功,
    所以才pData后加个'\n'结束符号就OK了。