首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-12-04 
socket 编程,内网连接不上的问题//服务端#include stdio.h#include Winsock2.h#pragma comment(lib,

socket 编程,内网连接不上的问题
//服务端
#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();
}
程序如上所示,分别运行在两台电脑上连接不上,只有客户端显示一大段烫字,当服务器的电脑防火墙都已经关闭,客户端与服务端运行在同一台电脑时可以显示。具体可能是哪里出现问题呢? socket? 局域网?
[解决办法]
自己debug... 看着只有40分...我就不拿着调了

去判断bind listen ...这些值是不是对的
[解决办法]
整体一看代码似乎没问题。

不过怀疑是地址不在一网段导致的吧。
都改成127.0.0.1
char recvBuf[50];//清空
再看看
connect 函数
accept  函数
返回值。

热点排行