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)
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)
解决方案 »
- 怎样生成安装文件包?
- 2個Dialog類之间的调用问题!!!!
- PostMessage和GetMessage用法
- 求助~!Google地图在日文操作系统中会弹出“Microsoft Script Editor”一个询问调试窗口(MFC环境,断网状态才出现,Silent已经改为True)
- ClistCtrl重载问题
- 菜菜的钩子问题
- ODBC于Access数据库的连接问题“试图越过有效存储区间”
- @@@@@@考什么专业的研究生呢?@@@@@
- 怎么在特定的多文档中显示字符串
- 如何将一个可以滚动的窗口的全部内容转换为BMP保存起来(如:IE)?(提供线索就有分)欢迎参与成果供享!!!
- 急问一动态链接库问题
- 如何连接加了密码的access数据库?
java、VC建立TCP连接本身没甚么问题,因为它们必须使用相同的底层网络协议。但是java对象可以序列号再通过网络传输,这在VC端肯定是无法解析的,不知是否是java代码传了对象。
另外,TCP和UDP相应的接收和发送函数是不同的,建议检查一下,是否java代码中存在这方面问题,因为你说java客户端原来是UDP的。或者写个java的TCP客户端测试一下。
如果我没有记错的话JAVA中和C++中WORD的字节大小是不一样的,还有其它类型也是如此。
因此这类跨平台的通信,强烈建议传输时以BYTE为单位进行传输(字节流的方式)。
特别是VC不要用CSocket+CArchive+CSocketFile这类方式和java程序通信。
第二,你的服务器端m_sockServer=socket(AF_INET,SOCK_STREAM,0);错误,应该是
m_sockServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
现在错误变成连接超时,本来的错误是连接被拒绝.
你在服务器端运行netstat -na ,看TCP的5000端口是否已经在监听。
如果两者都是YES,那你看两台机器是否能ping通。
所说的情况多是正常的,可是就是不知道为什么连接不上.
m_sockaddr.sin_port=m_nPort;-------->改为htons(m_nPort)
哈哈,比较弱智的一个问题,不好意思,自己很久才发现.
后来又发生一个问题,连接成功后,发现VC发送给JAVA的数据收不到,搞了好久才发现,
char* pData = sData.GetBuffer(sData.GetLength())
而pData没有结束符号,JAVA那边是按行来接收的,所以,没有结束符号,就一直不能接收成功,
所以才pData后加个'\n'结束符号就OK了。