在我的程序的服务器端,当程序命中接受函数时,它等待连接。找到连接传入后(在我与客户端连接后),accept()方法返回1.根据该返回,它尝试接收并发送到套接字1,这是一个错误的套接字。
以下是我服务器的一些代码:
for(;;)
{
if( sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen) != SOCKET_ERROR)
找到连接后,sConnect的值为1.
为什么会这样?我该如何解决?
答案 0 :(得分:5)
在Windows上,如果accept()
失败,则返回INVALID_SOCKET
,而不是SOCKET_ERROR
。
真正的问题是你的if()
语句同时执行赋值和比较,但它缺少一个必需的赋值括号,所以它实际上是在比较一个不同于你预期的值。这样做:
if( (sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen)) != INVALID_SOCKET )
更好的选择是分配分配和比较:
sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen);
if( sConnect != INVALID_SOCKET )
答案 1 :(得分:3)
因为您将accept
值返回的值与SOCKET_ERROR
进行比较,并将此布尔值指定给sConnect
:
if( sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen) != SOCKET_ERROR)
我个人不喜欢这么长的路线。分配作业和比较:
sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen);
if( sConnect != SOCKET_ERROR )
...
或至少添加括号。
答案 2 :(得分:1)
试试这个:
sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen);
if( sConnect != INVALID_SOCKET)