如何在vc6.0的mfc的dll里面编写socket? - VCMFC -

如何在vc6.0的mfc的dll里面编写socket? - VCMFC -,第1张

 服务器端:

一、建立支持SOCKET项目。

利用APP WIZARD创建MFC EXE项目,进行到WIZARD的第四步时,在“What features would you like include?”中,选中“Windows Sockets”项。其它各步骤各选项根据实际应用进行选择即可。这样创建的项目就已经支持SOCKET,并已经初始化了。

如果要在已有的项目中添加SOCKET支持,只须进行两项工作:

1 在stdafx.h文件中包含头文件afxsock.h (#include "afxsock.h" )。

2 初始化套接字,在应用程序类的成员函数:“::InitInstance()”中添加如下初始化套接字代码。(并在string table和resource.h中添加IDP_SOCKETS_INIT_FAILED的定义)

if (!AfxSocketInit())

{AfxMessageBox(IDP_SOCKETS_INIT_FAILED)<br>return FALSE}

二、创建服务套接字并创建监听线程

//创建服务套接字

SOCKET sercon=socket(PF_INET,SOCK_STREAM,0)

//判断是否成功创建

if (sercon==INVALID_SOCKET)

{AfxMessageBox(“Server WRONG !”)<br>return -1}

//配置套接字地址等信息

SOCKADDR_IN sin

sin.sin_family=AF_INET

//指定本地地址

sin.sin_addr.s_addr=htonl(INADDR_ANY)

//指定服务器端口号nPort,可自设

int nPort=5080

sin.sin_port=htons(nPort)

//地址信息与套接字进行绑定。

if (bind(sercon,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)

{AfxMessageBox(“bind wrong!”)<br>return -1}

//建立监听队列(大小为3),开始监听

if (listen(sercon,3)==SOCKET_ERROR)

{AfxMessageBox(“listen wrong!”)<br>return -1}

①实现监听线程,并创建数据接收线程。

//在程序需要开始监听连接的地方创建监听线程,并实现。

//创建监听线程(在程序开始或按钮事件实现中)

AfxBeginThread(waitconnect,NULL);

//实现监听线程

UINT waitconnect(LPVOID lpParm)

{

SOCKET conn[3]

int lenc=sizeof(sockaddr)

int alreadycon=0

//sercon为前面所创建服务器套接字

while(1)

{

if (alreadycon<=3)

{

//接受连接请求

conn[alreadycon] = accept(sercon, (LPSOCKADDR)&cin, &lenc)

if (conn[alreadycon]==INVALID_SOCKET)

{

AfxMessageBox("accept WRONG !")

}

else

{//创建数据接收线程

AfxBeginThread(readdata, &conn[alreadycon])

alreadycon++

return 0

}

}

else

{

//避免影响主线程运行

Sleep(200)

}

}

}

②实现数据接收线程。

UINT readdata(LPVOID ss)

{ SOCKET *readsock

readsock=(SOCKET *)ss

char buf[2000]

int revnum=0

//开始循环接受数据

while (revnum!=-1)

{//revnum<=0则表示连接已断!

revnum=recv(*readsock,buf,2000,0)

if (revnum>0)

buf[revnum]=0//截断缓冲区

//buf中存储已接受数据。}

return 0

}

没有联接socket库ws2_32.lib。解决办法:对于VC6.0要在porject/settings的link页面中object/librarymodules中添加ws2_32.lib就可以了。对于Dev-C++同样在工程/工程属性的参数页面中连接器那一栏中添加库,这时必须找到库文件的目录,对于Dev-C++的对应库文件是libws2_32.a,在软件安装下lib文件夹中可以找到相应的库文件。总结:所有运用到WinSock2的程序在编译连接时都要用的该库#pragmacomment(lib,"ws2_32.lib")。

加Socket是可以,将相应的头文件加进去,初始化一下Socket

单文档程序中加对话框也是可以的,在资源视图下创建对话框,使用DoModel或者CreateDialog方法显示。另外也可以考虑分隔窗口的方法,在分隔窗口中显示对话框。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11436889.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存