首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教你一个socket通信的有关问题

2012-05-27 
请问你一个socket通信的问题?C/C++ codeWSADATA wsa::WSAStartup(0x1010,&wsa)SOCKET clientclient::s

请问你一个socket通信的问题?

C/C++ code
WSADATA wsa;    ::WSAStartup(0x1010,&wsa);    SOCKET client;    client=::socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);    sockaddr_in sockin;    sockin.sin_family=AF_INET;    sockin.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");    sockin.sin_port=htons(6090);    int ret=::connect(client,(LPSOCKADDR)&sockin,sizeof(sockaddr_in));    if (SOCKET_ERROR==ret)    {        cout<<"连接服务器失败"<<endl;        ::WSACleanup();    }    char buf[1024]="10000";    ret=::send(client,buf,sizeof(buf),0);    if (SOCKET_ERROR==ret)    {        cout<<"失败"<<endl;    }    Sleep(2000);    ret=::send(client,buf,sizeof(buf),0);    if (SOCKET_ERROR==ret)    {        cout<<"失败"<<endl;    }    cout<<WSAGetLastError();

我的服务端是I/O模式的,我用上面代码向服务端发送数据,怎么只收到第一个send的数据?

[解决办法]
你的服务端读取了几次数据?
你的服务端代码呢?
[解决办法]
服务端代码呢?
[解决办法]
探讨

引用:
服务端代码呢?

C/C++ code
int SockServer::Init()
{
hSemaphore=::CreateSemaphore(NULL,0,100,NULL);
if (hSemaphore==INVALID_HANDLE_VALUE)
{
cout<<"创建信号量……

[解决办法]
这是神马语言。。。WINDOWS好复杂。
[解决办法]
你都发送数据了,为什么又只接收第一次的数据呢?
如果不想让服务器收到,可以不发,或者服务端收到不处理
[解决办法]
感觉是你的信号量hSemaphore没有重置,卡在那里了
[解决办法]
你两次 send发的都一样。。你怎么知道发的是第一次呢??
[解决办法]
淡定....
[解决办法]
每次accept(建立一个连接)后,才release一个信号量。
而每次GetQueuedCompletionStatus(一次IO操作)前,要wait一个信号量。

获取和释放锁的次数不等吧
[解决办法]
代码里,每次send是1024个字节(字符串"10000",后面一串\0),打印下dwTrans,看看一次获取了多少字节。


BOOL GetQueuedCompletionStatus(
HANDLE CompletionPort,
LPDWORD lpNumberOfBytes,
PULONG_PTR lpCompletionKey,
LPOVERLAPPED* lpOverlapped,
DWORD dwMilliseconds
);

第4个参数才是IO信息,代码里怎么比较第3个?
 bool bOk=::GetQueuedCompletionStatus(hcom,&dwTrans,(PULONG_PTR)&pPerHandle,&pOverLapped,WSA_INFINITE);
switch(pPerHandle->nOperationType)


热点排行