socket 编程,内网连接不上的问题

Moujiker 2013-11-20 02:34:46
//服务端
#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib, "ws2_32.lib")

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));// 绑定端口

listen(sockSrv,5);

SOCKADDR_IN addrClient;// 连接上的客户端ip地址
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);// 接受客户端连接,获取客户端的ip地址
char sendBuf[50];
sprintf_s(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));// 组合消息发送出去
send(sockConn,sendBuf,strlen(sendBuf)+1,0);// 发送消息到客户端
char recvBuf[50];
recv(sockConn,recvBuf,50,0);// 接受客户端消息
printf("%s\n",recvBuf);
//closesocket(sockConn);//断开连接
}

}

//客户端
#include <stdio.h>
#include <Winsock2.h>
#pragma comment( lib, "ws2_32.lib" )

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;
//addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
//addrSrv.sin_addr.S_un.S_addr=inet_addr("210.75.252.220");//百度查的IP
addrSrv.sin_addr.S_un.S_addr=inet_addr("172.20.20.204");//服务端局域网IP

addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
send(sockClient,"hello",strlen("hello")+1,0);
char recvBuf[50];
recv(sockClient,recvBuf,50,0);
printf("%s\n",recvBuf);

closesocket(sockClient);
WSACleanup();
}
程序如上所示,分别运行在两台电脑上连接不上,只有客户端显示一大段烫字,当服务器的电脑防火墙都已经关闭,客户端与服务端运行在同一台电脑时可以显示。具体可能是哪里出现问题呢?
...全文
384 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Moujiker 2013-11-20
  • 打赏
  • 举报
回复
同学电脑可以连接上,不过也不在同一网段,ip后两位不同(百度说是最后一个数字不同的在同一个网段),不过子网掩码相同,我自己本本子网掩码就不同,不过怎样都才能访问呢?
Moujiker 2013-11-20
  • 打赏
  • 举报
回复
引用 3 楼 xihu1364 的回复:
[quote=引用 2 楼 u011432871 的回复:] [quote=引用 1 楼 xihu1364 的回复:] 自己debug... 看着只有40分...我就不拿着调了 去判断bind listen ...这些值是不是对的
这段程序是孙鑫vc++深入详解里面的源代码,我对照着看了一遍,也没发现什么问题,我不知道是不是配置哪里出了问题,还有电脑我用的一个是有线,一个是无线,都是内网,应该不是这的问题吧[/quote] 应该... 汗! 不去做怎么知道? 你这样问,无非是让人家去一步一步调...[/quote] 我对照那本书把程序过了一遍,参照他的教材,程序是没问题,除非是教材有错。我想知道是不是因为电脑配置或者哪个地方设置的原因才连不上的
Moujiker 2013-11-20
  • 打赏
  • 举报
回复
引用 4 楼 bjtbjt 的回复:
整体一看代码似乎没问题。 不过怀疑是地址不在一网段导致的吧。 都改成127.0.0.1 char recvBuf[50];//清空 再看看 connect 函数 accept 函数 返回值。
嗯,IP地址不在一个网段,是不是因为一个是有线,一个是无线的原因,我再找台机子试试
5t4rk 2013-11-20
  • 打赏
  • 举报
回复
整体一看代码似乎没问题。 不过怀疑是地址不在一网段导致的吧。 都改成127.0.0.1 char recvBuf[50];//清空 再看看 connect 函数 accept 函数 返回值。
版主大哥 2013-11-20
  • 打赏
  • 举报
回复
引用 2 楼 u011432871 的回复:
[quote=引用 1 楼 xihu1364 的回复:] 自己debug... 看着只有40分...我就不拿着调了 去判断bind listen ...这些值是不是对的
这段程序是孙鑫vc++深入详解里面的源代码,我对照着看了一遍,也没发现什么问题,我不知道是不是配置哪里出了问题,还有电脑我用的一个是有线,一个是无线,都是内网,应该不是这的问题吧[/quote] 应该... 汗! 不去做怎么知道? 你这样问,无非是让人家去一步一步调...
Moujiker 2013-11-20
  • 打赏
  • 举报
回复
引用 1 楼 xihu1364 的回复:
自己debug... 看着只有40分...我就不拿着调了 去判断bind listen ...这些值是不是对的
这段程序是孙鑫vc++深入详解里面的源代码,我对照着看了一遍,也没发现什么问题,我不知道是不是配置哪里出了问题,还有电脑我用的一个是有线,一个是无线,都是内网,应该不是这的问题吧
版主大哥 2013-11-20
  • 打赏
  • 举报
回复
自己debug... 看着只有40分...我就不拿着调了 去判断bind listen ...这些值是不是对的

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧