能力值:
( LV3,RANK:20 )
2 楼
补充一下,我没有为对话框添加WOSA支持,如果勾选了该选项则会在StdAfx头文件后部自动加上#include <afxsock.h>并且在C工程名App::InitInstance()里自动添加
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
当然无论添加支持与否都无法通过编译
能力值:
( LV2,RANK:10 )
3 楼
在你的Cpp文件开头加
#include "winsock2.h" 在程序启动的位置使用
WSAStartup来启动网络支持
连接时,你要把库wsock32.lib加上
能力值:
( LV3,RANK:20 )
4 楼
相关代码如下,工程名为Chat,用WSA系列异步套接字只能用winsock2.h
BOOL CChatDlg::InitSocket()
{
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);
if(INVALID_SOCKET==m_socket)
{
MessageBox("创建套接字失败");
return FALSE;
}
SOCKADDR_IN addrSock;
addrSock.sin_addr.S_un .s_addr=htonl(INADDR_ANY);
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(6000);
if(SOCKET_ERROR==bind(m_sockt,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)))
{
MessageBox("绑定失败");
return FALSE;
}
if(SOCKET_ERROR==WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ))
{
MessageBox("注册网络读取事件失败");
return FALSE;
}
return TRUE;
}
#include <winsock2.h>放在StdAfx前部报错Windows重包含,放在StdAfx后部报错如下
E:\VS\Workspaces\Chat\ChatDlg.cpp(180) : error C2039: 'S_un' : is not a member of '__unnamed'
e:\vs\vc98\include\winsock2.h(311) : see declaration of '__unnamed'
E:\VS\Workspaces\Chat\ChatDlg.cpp(180) : error C2228: left of '.S_addr' must have class/struct/union type
E:\VS\Workspaces\Chat\ChatDlg.cpp(183) : error C2065: 'm_sockt' : undeclared identifier
E:\VS\Workspaces\Chat\ChatDlg.cpp(188) : error C2065: 'UM_SOCK' : undeclared identifier
能力值:
( LV3,RANK:20 )
5 楼
三楼的方法刚试了下——写过WSAStartup也连接了库文件,依然报1楼或4楼的错误
能力值:
( LV2,RANK:10 )
6 楼
S_un 什么东东?
addrSock.sin_addr.s_addr=htonl(INADDR_ANY);
能力值:
( LV3,RANK:20 )
7 楼
回6楼,S_un是联合体的一个域,不用也可以,但是问题仍没有解决,自己顶
我顶,努力中
能力值:
( LV3,RANK:20 )
8 楼
看来书中的东西错的很厉害。S_un是in_addr下的一个联合体
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
}
结贴结贴
能力值:
( LV4,RANK:50 )
9 楼
我认为放在
StdAfx.h
我编写的Sock程序就是这么做的。好处是:在MFC中所有的其他.cpp都需要包含StdAfx.h一下,否则编译出错。那么一些系统的头文件在StdAfx.h中包含,就会让其他一些源文件不需用药重新包含了。这是自己理解的,仅供参考
能力值:
( LV3,RANK:20 )
10 楼
结贴了,我终于试出来了,只能放在StdAfx.h中#include <afxwin.h> 语句以后的任意位置