我要做个对话框程序和别的机器通信,同时要用到TCP和UDP的套接字,我做为TCP套接字的客户段,要和服务器断进行数据传送,能后要建个UDP的套接字接收服务器用UDP广播出来的的数据,TCP和UDP做为单个工程实现是都没问题,但当两个集成到一个工程中就有问题了,实现的主要代码如下:
/////////////////////////////////////////
class CClientTestDlg : public CDialog
{
       ......
public:
CSocket m_socket;
        //{{AFX_MSG(CClientTestDlg)
        afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
       ......
}
BOOL CClientTestDlg::OnInitDialog()
{
     ......
     m_socket.Create(8000,SOCK_DGRAM,NULL);
     SetTimer(1,3000.NULL);
     ......
}
void CClientTestDlg::OnTimer(UINT nIDEvent) 
{
char szRecv[100];
CString szIP("192.0.95.1");
UINT uPort=8000;
int iRecv =m_socket.ReceiveFrom(szRecv,100,szIP,uPort,0);
szRecv[iRecv]='\0';
//m_szRecv=szRecv;
CString str;
str.Format("%s",szRecv);
m_list1.InsertString(0,str);
// AfxMessageBox(szRecv);
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
/////////////////////////////////////////////////
void CClientTestDlg::Command()
{
LPCTSTR ip; CGetIP di;
di.ipstr = _T("128.0.95.1");
if(di.DoModal() == IDOK)
{
if(di.ipstr.IsEmpty())
{
MessageBox("??óDê?è?IPμ??·?£","??ê?è?IPμ??·",NULL);
return;
}
else
ip = di.ipstr;
}
else
return;    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2,1),&wsaData)) //μ÷ó?Windows Sockets DLL

         list.InsertString(0,"Winsock?T·¨3?ê??ˉTCP SOCK!");
         WSACleanup();
         return;
} list.InsertString(0,"·t???÷?aê?′′?¨ TCP SOCKET?£"); ServerSocket=socket(PF_INET,SOCK_STREAM,0);    //′′?¨·t???÷??Socket£?ààDí?aSOCK_STREAM£????òá??óμ?í¨D?    if(ServerSocket == INVALID_SOCKET)
{
         list.InsertString(0,"?T·¨′′?¨·t???÷TCP socket!");
         return;
}    list.InsertString(0,"·t???÷???ú:6000"); DWORD dwip;
if((dwip=inet_addr(ip))==INADDR_NONE)
{
list.InsertString(0,"IP?3?μ′í?ó");
return;
}
    sockStruct.sin_family=AF_INET; //ê1ó?TCP/IPD-òé
    sockStruct.sin_port = htons(6000);
sockStruct.sin_addr.S_un.S_addr = dwip; if(connect(ServerSocket,(LPSOCKADDR)&sockStruct,sizeof(sockStruct)) == SOCKET_ERROR)
    {
    list.InsertString(0,"?T·¨á??ó·t???÷?£");
list.InsertString(0,"");
        return;
} WSAAsyncSelect(ServerSocket,m_hWnd,WM_CLIENT_READCOLOSE,FD_READ|FD_CLOSE);
         // 2úéú?àó|′?μY??′°?úμ????¢?aWM_SERVER_ACCEPT £??aê?×??¨ò????¢  list.InsertString(0,"á??ó·t???÷3é1|?£");
// list.InsertString(0,"IPμ??·:"+di.ipstr);
GetDlgItem(IDOK)->SetWindowText("ò?á?é?!");
IsTrue = TRUE;    return;
}问题是:
 程序好像在不停的运行定时器函数的代码,程序没时间运行TCP的其他函数,请问这需要怎么解决,是要开个线程来解决问题吗,要怎么,在那开个呢,要让定时器函数在后台运行呢?谢谢!