怎样在基于对话框的mfc中使用socket

shiter
人工智能领域优质创作者
博客专家认证
2013-01-25 02:21:17
我建立了一个按钮,点击后开始监听相应的按钮。类似下面的代码,基于对话框的mfc里面怎么改啊?
放在那里?


//创建监听套接字
SOCKET socklisten;
if((socklisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
{
printf("socket failed!!!\n");
tes="socket failed!!!";
m_list.InsertItem(item++,tes);
WSACleanup();
return -1;
}

//设置服务器地址
struct sockaddr_in servaddr;

memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(9999);
servaddr.sin_addr.S_un.S_addr=inet_addr(IPADDR);

//绑定socket地址结构到监听套接字
if (bind(socklisten,(sockaddr *)&servaddr,sizeof(servaddr))!=0)
{
printf("binding failed!!!\n");
tes="binding failed!!!";
m_list.InsertItem(item++,tes);
closesocket(socklisten);
WSACleanup();
}

//在server上运行监听
if (listen(socklisten,20)!=0)
{
printf("listen failed !!!\n");
tes="listen failed !!!";
m_list.InsertItem(item++,tes);
closesocket(socklisten);
WSACleanup();
return -1;
}

int client_addr_length = sizeof(clientaddr);
memset(&clientaddr,0,client_addr_length);
SOCKET connect;

//循环等待
while (1)
{
if ((connect=accept(socklisten,(sockaddr *)&clientaddr,&client_addr_length))==INVALID_SOCKET)
{
printf("accept failed!!\n");
closesocket(connect);
WSACleanup();
return -1;
}

//创建新线程
DWORD ThreadID;
CreateThread(NULL,0,RequestThread,(LPVOID)connect,0,&ThreadID);
}


而且还要循环多线程接收多线程发来的文件?
...全文
204 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiter 2013-01-25
  • 打赏
  • 举报
回复
引用 7 楼 tiger9991 的回复:
那在开始按钮里面启动一个线程,while循环accept不就可以么?
奥,这样对。。。
  • 打赏
  • 举报
回复
还需要开几个线程
  • 打赏
  • 举报
回复
用CSocket 类吧 或者用它的父类
看不见的裂痕 2013-01-25
  • 打赏
  • 举报
回复
那在开始按钮里面启动一个线程,while循环accept不就可以么?
jimette 2013-01-25
  • 打赏
  • 举报
回复
在建立一个监听线程 !
shiter 2013-01-25
  • 打赏
  • 举报
回复
引用 3 楼 tiger9991 的回复:
1.如果不了解MFC结构的话建议初始化OnInitDialog的时候就调用 2.OnInitUpdate是针对MainFrame的(OnCreate也可以)
我是想,多线程tcp接收客户端请求。 对话框,上面放了一个按钮,点击后开始监听端口 然后,想请问循环开线程接收的代码放在什么地方? OnInitDialog里面么?
shiter 2013-01-25
  • 打赏
  • 举报
回复
引用 1 楼 sha_jinhao 的回复:
lz 会建一个mfc的对话框工程么?
引用 2 楼 sha_jinhao 的回复:
然后加socket 代码!
感觉。。。。 我是想问,类似下面的循环接收的线程代码,我应当在基于对话框的mfc中怎么修改,放在那里,帮忙给个思路,刚接触。

//循环等待
	while (1)
	{
		if ((connect=accept(socklisten,(sockaddr *)&clientaddr,&client_addr_length))==INVALID_SOCKET)
		{
			printf("accept failed!!\n");
			closesocket(connect);
			WSACleanup();
			return -1;
		}

		//创建新线程
		DWORD ThreadID;
		CreateThread(NULL,0,RequestThread,(LPVOID)connect,0,&ThreadID);
	}
看不见的裂痕 2013-01-25
  • 打赏
  • 举报
回复
1.如果不了解MFC结构的话建议初始化OnInitDialog的时候就调用 2.OnInitUpdate是针对MainFrame的(OnCreate也可以)
jimette 2013-01-25
  • 打赏
  • 举报
回复
然后加socket 代码!
jimette 2013-01-25
  • 打赏
  • 举报
回复
lz 会建一个mfc的对话框工程么?

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧