vc++ socket编程上的异常,求大神教
vc++ socket编程上的错误,求大神教
#include "stdafx.h"
#include <winsock2.h>
#include<iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA w;
WORD ver=MAKEWORD(2,2);
WSAStartup(ver,&w);
SOCKET server;
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=(htons(12345));
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
server=socket(AF_INET,SOCK_STREAM,0);
bind(server,(SOCKADDR*)&addr,sizeof(addr));
listen(server,10);
SOCKET client;
cout<<"服务端已启动!\n";
while(TRUE)
{
if(client=accept(server,0,0)!=INVALID_SOCKET)
{
cout<<"有客户尝试连接\n";
if( send(client,"Password",sizeof("Password"),0)!=SOCKET_ERROR)
cout<<"有客户请求连接,正等待客户输入验证信息\n";
else
{
cout<<"发送失败!\n"<<WSAGetLastError ();
}
}
}
return 0;
}
客户端部分代码:
char buff[20];
if(recv(server,buff,sizeof(buff),0)!=SOCKET_ERROR)
/*if语句不成立,还导致未响应
*/
{
MessageBox("lianjiechenggong");
if(strcmp(buff,"Password")==0)
{
CPASSWORD password;
password.DoModal();
}
}
else{
CString str;
str.Format("%d",WSAGetLastError());
MessageBox(str);
}
}
}
两边的错误码分别是(客户端)1 0 0 5 4 —W S A E C O N N R E S E T
和1 0 0 3 8 —W S A E N O T S O C K
我刚学,也许问题很简单,希望大家不要笑话,能够体验新手有问题百思不得其解的心情,
给以宝贵的意见,谢谢大家
------解决方案--------------------
客户端10054应该是你连接的地址不对,建议参考这的socket例子:
http://download.****.net/detail/geoff08zhang/4571358
------解决方案--------------------
地址没错都是本机的,那就检查下端口是否设置正确,客户端和服务器的是否对应
------解决方案--------------------
额。。。貌似你这里可能理解错了
send(client,"Password",sizeof("Password"),0)这句有错 10038
客户端recv(server,buff,sizeof(buffer),0)这句有错 10054
sizeof貌似是返回"Password"这个数据的类型的大小的,也就是说你接收的长度错了,你调试下看看
比如我一般这样写while ( recv(sockfd, text,512, 0) > 0)
text是char text[512]
第三个参数的意思是接收512个char参数
------解决方案--------------------
if((client=accept(server,0,0))!=INVALID_SOCKET)
注意运算符优先级, !=优先级高于=
#include "stdafx.h"
#include <winsock2.h>
#include<iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA w;
WORD ver=MAKEWORD(2,2);
WSAStartup(ver,&w);
SOCKET server;
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=(htons(12345));
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
server=socket(AF_INET,SOCK_STREAM,0);
bind(server,(SOCKADDR*)&addr,sizeof(addr));
listen(server,10);
SOCKET client;
cout<<"服务端已启动!\n";
while(TRUE)
{
if(client=accept(server,0,0)!=INVALID_SOCKET)
{
cout<<"有客户尝试连接\n";
if( send(client,"Password",sizeof("Password"),0)!=SOCKET_ERROR)
cout<<"有客户请求连接,正等待客户输入验证信息\n";
else
{
cout<<"发送失败!\n"<<WSAGetLastError ();
}
}
}
return 0;
}
客户端部分代码:
char buff[20];
if(recv(server,buff,sizeof(buff),0)!=SOCKET_ERROR)
/*if语句不成立,还导致未响应
*/
{
MessageBox("lianjiechenggong");
if(strcmp(buff,"Password")==0)
{
CPASSWORD password;
password.DoModal();
}
}
else{
CString str;
str.Format("%d",WSAGetLastError());
MessageBox(str);
}
}
}
两边的错误码分别是(客户端)1 0 0 5 4 —W S A E C O N N R E S E T
和1 0 0 3 8 —W S A E N O T S O C K
我刚学,也许问题很简单,希望大家不要笑话,能够体验新手有问题百思不得其解的心情,
给以宝贵的意见,谢谢大家
Visual C++
socket
------解决方案--------------------
客户端10054应该是你连接的地址不对,建议参考这的socket例子:
http://download.****.net/detail/geoff08zhang/4571358
------解决方案--------------------
地址没错都是本机的,那就检查下端口是否设置正确,客户端和服务器的是否对应
------解决方案--------------------
额。。。貌似你这里可能理解错了
send(client,"Password",sizeof("Password"),0)这句有错 10038
客户端recv(server,buff,sizeof(buffer),0)这句有错 10054
sizeof貌似是返回"Password"这个数据的类型的大小的,也就是说你接收的长度错了,你调试下看看
比如我一般这样写while ( recv(sockfd, text,512, 0) > 0)
text是char text[512]
第三个参数的意思是接收512个char参数
------解决方案--------------------
if((client=accept(server,0,0))!=INVALID_SOCKET)
注意运算符优先级, !=优先级高于=