我也了个客户端服务器端,采用select机制,当服务器端有数据到达时触发FD_READ事件
,在这里我用recv函数收数据,代码如下:
Len=recv(this->ss,abuffer,sizeof(abuffer),0);
if(Len==SOCKET_ERROR)
{
int temp=GetLastError();
AfxMessageBox(_itoa(temp,a,10));}
结果老是收不到,错误号10038,注:(ss是调用accept是生成的对象)
,在这里我用recv函数收数据,代码如下:
Len=recv(this->ss,abuffer,sizeof(abuffer),0);
if(Len==SOCKET_ERROR)
{
int temp=GetLastError();
AfxMessageBox(_itoa(temp,a,10));}
结果老是收不到,错误号10038,注:(ss是调用accept是生成的对象)
估计是你的 accept()或connect()中的最后那个参数的问题,看是否是该用指针用成对象了
{
case FD_ACCEPT:
AfxMessageBox("Aceept");
int tmp;
tmp=sizeof(client);
if(this->ss=accept(this->Server_sock,(SOCKADDR*)&client,&tmp)==INVALID_SOCKET )
{
AfxMessageBox("accept fialed");
}
break;
case FD_READ:
while(1){
char a[10];
Len=recv(this->ss,abuffer,sizeof(abuffer),0);
if(Len==SOCKET_ERROR)
{
int temp=GetLastError();
AfxMessageBox(_itoa(temp,a,10));
//break;
break;
}
if(Len>0)
{
AfxMessageBox("Write");
CFile cf;
char* pFileName = "mysql.txt";
//strcpy(buffer,_TEXT("nihao"));
if(cf.Open(pFileName,CFile::modeCreate|CFile::modeWrite)==0)
{
AfxMessageBox("FD_WRITE");
break;
}
cf.Write(abuffer,sizeof(abuffer));
break; }}
// while(true){
// Len= send(this->ss,bb,sizeof(bb),0);
break;}
return false;
} // buffer[10];
//CString s;
//
// CFile cf;
// char* pFileName = "mysql.txt";
// if(cf.Open(pFileName,CFile::modeCreate|CFile::modeWrite)==0){
// AfxMessageBox("FD_WRITE");
// return false ;}
// cf.WriteHuge(
// cf.Write(buffer,sizeof(buffer));
// break;
//case FD_WRITE:
// AfxMessageBox("FD_WRITE");
// break;
// default:
// break;
int CRundllDlg::socketStart(){
WSADATA data;
WORD wVersionRequested;
wVersionRequested=MAKEWORD(1,1 );
int err=WSAStartup(wVersionRequested,&data);
if(err!=0)
{
::GetLastError();
AfxMessageBox("11");
return 0;
}
this->Server_sock=socket(AF_INET,SOCK_STREAM,0 );
//setsockopt(Server_sock,SOL_SOCKET,SO_SNDBUF,(char FAR*)sockBufferS,sizeof(sockBufferS)); int iErrorCode=WSAAsyncSelect(this->Server_sock,this->m_hWnd,WM_SOCKETME, FD_READ|FD_ACCEPT);
if(iErrorCode==SOCKET_ERROR)
{
AfxMessageBox("44");
return 0;
}
//char a[]="192.168.0.42";
SOCKADDR_IN a;
a.sin_family=AF_INET; a.sin_port=htons (6000);
//a.sin_port=INADDR_ANY;
a.sin_addr.S_un.S_addr=inet_addr("192.168.0.42"); if(bind(this->Server_sock,(SOCKADDR*)&a,sizeof(a))!=0)
{
::GetLastError();
AfxMessageBox("22");
return 0;
}
if(listen(this->Server_sock,5)!=0)
{
AfxMessageBox("33");
return 0;
}
return 1;
}
ss就是我accept生成的啊