怎样在基于对话框的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);
}


而且还要循环多线程接收多线程发来的文件?
...全文
128 10 点赞 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shiter 2013-01-25
引用 7 楼 tiger9991 的回复:
那在开始按钮里面启动一个线程,while循环accept不就可以么?
奥,这样对。。。
  • 打赏
  • 举报
回复
zhangyihu321 2013-01-25
还需要开几个线程
  • 打赏
  • 举报
回复
zhangyihu321 2013-01-25
用CSocket 类吧 或者用它的父类
  • 打赏
  • 举报
回复
傻X 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);
	}
  • 打赏
  • 举报
回复
傻X 2013-01-25
1.如果不了解MFC结构的话建议初始化OnInitDialog的时候就调用 2.OnInitUpdate是针对MainFrame的(OnCreate也可以)
  • 打赏
  • 举报
回复
jimette 2013-01-25
然后加socket 代码!
  • 打赏
  • 举报
回复
jimette 2013-01-25
lz 会建一个mfc的对话框工程么?
  • 打赏
  • 举报
回复
相关推荐
发帖
网络编程
加入

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2013-01-25 02:21
社区公告
暂无公告