简单的问题50 简单的问题:我现做一个网络方面的小东西,在SOCKET套接字LISTEN()后,整个界面都不响应了,请问要如何修改?先谢了!比较急! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 AfxBeginThread()这个函数就可以啦,具体你可以在msdn上面查一下,当然也可以使用CWinThread来派生 在对Socket进行Bind之前,先调用WSAAsyncSelect使Socket工作在异步状态就可以了 _beginthread()谁用过啊?告诉我怎么写?因为写的时候都说第一个参数不对 不可能 ,listen本来就是一个线程啊,怎么会界面不响应. 同意chen_jun_fen(bitwise),肯定是其它出错。主要代码、你怀疑出错的代码帖出来看看!_beginthread()函数你怎么用的拿出来看看,这样才能更方便的帮你 CTcpIpSocket RecvSocket; SOCKET ListenSocket; ListenSocket= RecvSocket.FunInitSocket(); //监听 RecvSocket.FunListen(ListenSocket,FILE_PORT);//CTcpIpSocket为自己建的类,FunInitSocket()和FunListen(ListenSocket,FILE_PORT)都为类内部函数FunListen(ListenSocket,FILE_PORT)内部调用了bind(),和listen()就这样啊 FunListen(ListenSocket,FILE_PORT)内部调用了bind(),和listen():它的简要代码帖出来,你就贴上面的,谁知道错在那里? 不是Listen本身的问题,肯定问题出在其他地方, 没有响应,肯定内部哪个函数导致完全占用cpu资源但问题不在于listen() SOCKET CTcpIpSocket::FunListen(const SOCKET ListenSocket,u_short port){ SOCKADDR_IN TcpServer; TcpServer.sin_family = AF_INET; TcpServer.sin_port = htons(port); TcpServer.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(ListenSocket,(SOCKADDR *)&TcpServer,sizeof(TcpServer)) < 0) { ::MessageBox(NULL,"TCP 绑定socket失败!",TEXT("消息"),MB_OK|MB_TASKMODAL); return SOCKET_ERROR; } if(listen(ListenSocket,1) != 0) { ::MessageBox(NULL,"TCP 侦听socket失败!",TEXT("消息"),MB_OK|MB_TASKMODAL); return SOCKET_ERROR; } return ListenSocket;}这个 就是FunListen()拉 if(listen(ListenSocket,1) != 0) { ::MessageBox(NULL,"TCP 侦听socket失败!",TEXT("消息"),MB_OK|MB_TASKMODAL); return SOCKET_ERROR; }改成listen(ListenSocket,1);看看 实际上不是listen导致界面不响应,是因为accept才被阻塞的。应该通过线程的方法进行解决:DWORD WINAPI yourAccept(PVOID pParam){ //通过传入的参数获得你listen的套接字 //accept //如果accept成功,则PostMessage给你的主线程}在主线程中: //listen(...) //CreateThread(...,yourAccept,pParam,...) //加入对消息的响应:ON_MESSAGE_MAP里面ON_COMMAND(WM_YOURMSG, yourProcess) //afxmsg DWORD yourAPI(PVOID) 呵呵,他的accept代码又看不到! 在OnAccept里面相应你的YourAccept在OnReceive里面相应你的YourReceive或者你可用网络选择事件的方法来解决 请问xxxxxxyy xxxxxxzz xxxxxxpp to 0xxxxxx1 0xxxxxx1 0xxxxxx1 0yyzzpp1 是什么编码类型 请问com怎么返回一个数组?一定要可以跨语言调用的!! 求助:做网络到底哪个语言(工具)要方便点呢? 请需要c#全站程序和mis oa程序的网友进来看看 在vc中如何做程序的启动界面? 如何遍历注册表,以及ini文件 请问各位大侠哪里有DELPHI或者VC的视频教学片下呢?如知道,麻烦相告。 在线等待 对话框颜色 VC++数据库编程请求帮助!!! LPSTR类型怎么转为CString类型? word文档的结构 qq状态栏的小图标隐藏!
因为写的时候都说第一个参数不对
SOCKET ListenSocket;
ListenSocket= RecvSocket.FunInitSocket();
//监听
RecvSocket.FunListen(ListenSocket,FILE_PORT);
//CTcpIpSocket为自己建的类,FunInitSocket()和FunListen(ListenSocket,FILE_PORT)都为类内部函数
FunListen(ListenSocket,FILE_PORT)内部调用了bind(),和listen()
就这样啊
{
SOCKADDR_IN TcpServer; TcpServer.sin_family = AF_INET;
TcpServer.sin_port = htons(port);
TcpServer.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(ListenSocket,(SOCKADDR *)&TcpServer,sizeof(TcpServer)) < 0)
{
::MessageBox(NULL,"TCP 绑定socket失败!",TEXT("消息"),MB_OK|MB_TASKMODAL);
return SOCKET_ERROR;
}
if(listen(ListenSocket,1) != 0)
{
::MessageBox(NULL,"TCP 侦听socket失败!",TEXT("消息"),MB_OK|MB_TASKMODAL);
return SOCKET_ERROR;
} return ListenSocket;
}
这个 就是FunListen()拉
{
::MessageBox(NULL,"TCP 侦听socket失败!",TEXT("消息"),MB_OK|MB_TASKMODAL);
return SOCKET_ERROR;
}
改成listen(ListenSocket,1);看看
应该通过线程的方法进行解决:DWORD WINAPI yourAccept(PVOID pParam)
{
//通过传入的参数获得你listen的套接字
//accept
//如果accept成功,则PostMessage给你的主线程
}在主线程中:
//listen(...)
//CreateThread(...,yourAccept,pParam,...)
//加入对消息的响应:ON_MESSAGE_MAP里面ON_COMMAND(WM_YOURMSG, yourProcess)
//afxmsg DWORD yourAPI(PVOID)
在OnReceive里面相应你的YourReceive
或者你可用网络选择事件的方法来解决