当前位置:编程学习 > C#/ASP.NET >>

UDP套接字SOCKET通信问题!

UDP服务端创建了四个套接字,端口为6000-6003 绑定好后,客户端向服务器其中一个端口发送请求。服务器收到以后保存客户端的SOCKADDR_IN地址。然后客户端分别向服务器4个端口发数据,结果服务器都能接收成功,客户端却只能收到第一次发送请求时那个端口来的数据,原因何在? --------------------编程问答-------------------- 自己顶上!!! --------------------编程问答-------------------- 这叫什么问题?
看不懂的路过。 --------------------编程问答-------------------- 发代码来看看? --------------------编程问答-------------------- 你加了循环“侦听”了么? --------------------编程问答--------------------
引用 4 楼 icdbow 的回复:
你加了循环“侦听”了么?


加了,本地测试正常,放服务器出现这种问题。 --------------------编程问答--------------------
引用 3 楼 danding_ge 的回复:
发代码来看看?


我的代码是C++,实现方式是,在服务器任意一个监听中保存客户端的SOCKADDR_IN后,客户端向服务器各个端口放数据,服务器收到以后马上回复。在本地测试正常,放服务器就出问题。 --------------------编程问答-------------------- SOCKET sock[4];
SOCKADDR_IN userAddr;
SOCKADDR_IN si;
si.sin_family = AF_INET;
si.sin_addr.S_un.S_addr = INADDR_ANY;

//创建线程
for(int i=0; i < THREAD_NUM; ++i)
{
    si.sin_port = htons(6000 + i);
    sock[i] = socket(AF_INET,SOCK_DGRAM,0);
    if(bind(sock[i], (sockaddr*)&g_si, sizeof(g_si)) == SOCKET_ERROR)
    {
MessageBox(_T("绑定失败!"));
return;
    }
    HANDLE hThreadHandle = CreateThread(NULL, 0, ServerThread, (LPVOID)i, 0, 0);
    if (hThreadHandle == NULL)
    {
MessageBox(_T("创建线程失败!"));
return;
    }
    CloseHandle(hThreadHandle);

}

//监听
DWORD WINAPI CUdpGameServerDlg::ServerThread (LPVOID lpParam)
{
     DWORD dwTrans;
     DWORD nFlags = 0;
     int nLen = sizeof(SOCKADDR);

     SOCKADDR_IN addrClient;
     char tem[BUFFER_SIZE];

     WSABUF buf;
     buf.buf = tem;
     buf.len = BUFFER_SIZE;
     int ThreadID = (int)lpParam;

     while(TRUE)
     {
WSARecvFrom(sock[ThreadID], &buf, 1, &dwTrans, &nFlags, (sockaddr*)&addrClient, &nLen, NULL, NULL);

        switc(dwTrans)
        {
            case packLen:
            {
                WSASendTo(sock[ThreadID], &buf, 1, &dwTrans, nFlags, (sockaddr*)&userAddr,nLen, NULL, NULL);
                break;
            }
            case loginLen:
            {
               userAddr = addrClient;
               break;
            }
            defalut:break;
        }
}
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,