您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> 网络通信问题,帮我看看这段代码为什么不能发送

网络通信问题,帮我看看这段代码为什么不能发送

来源:网络整理     时间:2016/7/28 11:32:01     关键词:

关于网友提出的“ 网络通信问题,帮我看看这段代码为什么不能发送”问题疑问,本网通过在网上对“ 网络通信问题,帮我看看这段代码为什么不能发送”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 网络通信问题,帮我看看这段代码为什么不能发送
描述:

本帖最后由 ltsf1984 于 2010-10-15 16:16:07 编辑

以下是我写的代码,我的电IP 192.168.1.148,同学的电脑IP 192.168.1.169
void CCLJCnet1Dlg::OnBnClickedConnect()
{
// TODO: 在此添加控件通知处理程序代码
SOCKET socketServer;
unsigned long ulAddress;
SOCKADDR_IN sin;
ulAddress=inet_addr("192.168.1.148");//我电脑上的IP
socketServer=socket(PF_INET,SOCK_DGRAM,0);
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=ulAddress;
sin.sin_port=htons(3333);
bind(socketServer,(sockaddr*)&sin,sizeof(sin));
CString str="16 16 02 01 03 22 00";
LPCTSTR p=str;
SOCKADDR_IN  addr;
int mTargetIp;
mTargetIp=inet_addr("192.168.1.169");//同学电脑上的IP
memset((char *) &addr, 0, sizeof(addr));  
addr.sin_family      = AF_INET;
addr.sin_addr.s_addr = htonl(mTargetIp);
addr.sin_port        = htons(3333);
int nCharSend = sendto(socketServer, (char*)&str, str.GetLength(), 0, 
(sockaddr *) &addr, sizeof(addr));
if(nCharSend==-1)
MessageBox("发送过程中发生一个错误!",NULL,MB_OK);
char buff[256];
int recvaddr=sizeof(addr);
recvfrom(socketServer,(char*)buff,256,0,(sockaddr*)&addr,&recvaddr);
AfxMessageBox(buff);
}

以上是我电脑上的程序 ,同学电脑上的程序,就是把两个IP对换之后的,这段程序不能给给对方发信息(也不是知道是收不到还是什么),请高手指点下
解决方案1:

int nCharSend = sendto(socketServer, (char*)&str, str.GetLength(), 0, 
        (sockaddr *) &addr, sizeof(addr));
    if(nCharSend==-1)
哥的。CString能这么用? 想得到char*的用CString的接口获得。好像是getbuffer之类的。

解决方案2:

建议对每个函数做错误处理,
比如 retVal = bind();
if(SOCKET_ERROR == retVal)
{
   printf(.....);
......
}
这样你应该很容易找到问题

解决方案3:

socket(PF_INET,SOCK_DGRAM,0)这个函数的第一个参数不是AF_INET么,我看书上都是这么用的呀!
你的sendto()的第一个参数应该为你要发送的主机的 socket。而你的这个用的应该是UDP协议,bind()是只在作用服务器的程序里有的,客户端的程序里是不用的!
给你看下我的:
服务器:
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 udpserve=socket(AF_INET,SOCK_DGRAM,0);
sockaddr_in srv_addr;
srv_addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
srv_addr.sin_family=AF_INET;
srv_addr.sin_port=htons(6000);
bind(udpserve,(sockaddr*)&srv_addr,sizeof(sockaddr));
sockaddr_in client_addr;
int len=sizeof(sockaddr);
char recvbuf[100];
recvfrom(udpserve,recvbuf,100,0,(sockaddr*)&client_addr,&len);
printf("%s",recvbuf);
closesocket(udpserve);
WSACleanup();
}
客户:
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 udpclient=socket(AF_INET,SOCK_DGRAM,0);
sockaddr_in srv_addr;
srv_addr.sin_addr.S_un.S_addr=inet_addr("10.250.203.71");
srv_addr.sin_family=AF_INET;
srv_addr.sin_port=htons(6000);
sendto(udpclient,"你好,udp主机\n",strlen("你好,udp主机\n")+1,0,(sockaddr*)&srv_addr,
sizeof(sockaddr));
closesocket(udpclient);
WSACleanup();
}

解决方案4:

sendto(socketServer, (char*)&str, str.GetLength(), 0, 
这句中的sendto的第二个参数(char*)&str;这个怎么写成这样呢?


以上介绍了“ 网络通信问题,帮我看看这段代码为什么不能发送”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2985184.html

相关图片

相关文章