socket编程遇到bind error;求大神指导!纠结了一下午都不知道为啥。。
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#define buf_size 64
#include <Winbase.h>
#include <stdlib.h>
int main(int argc,_TCHAR* argv[])
{
WSADATA wsd;
SOCKET sserver;
SOCKET sclient;
int retval;
int on=1;
char buf[buf_size];
//初始化socket
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
printf("wsastartup failed!\n");
return 1;
}
//创建用于监听的socket
sserver=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sserver)
{
printf("socket failed!");
WSACleanup();
return -1;
}
//设置服务器socket地址
SOCKADDR_IN addrserv;
addrserv.sin_family=AF_INET;
addrserv.sin_port=htons(9990);
addrserv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//绑定socket server到本地地址
retval=bind(sserver,(const struct sockaddr*)&addrserv,sizeof(addrserv));
if(SOCKET_ERROR==retval);
{
printf("bind failed!\n");
printf("%d",retval);
closesocket(sserver);
WSACleanup();
return -1;
}
//在socket上进行监听
retval=listen(sserver,1);
if(SOCKET_ERROR==retval);
{
printf("listen failed!\n");
closesocket(sserver);
WSACleanup();
return -1;
}
//接受来自客户端的请求
printf("TCP Server start...\n");
SOCKADDR_IN addrclient;
int addrclientlen=sizeof(addrclient);
sclient=accept(sserver,(const struct sockaddr FAR*)&addrclient,&addrclientlen);
if(INVALID_SOCKET==sclient)
{
printf("accept failed!\n");
closesocket(sserver);
WSACleanup();
return -1;
}
while(1)
{
SecureZeroMemory(buf,buf_size);
retval=recv(sclient,buf,buf_size,0);
printf("recv from client[%s:%d]:%s\n",inet_ntoa(addrclient.sin_addr),addrclient.sin_port,buf);
if(strcmp(buf,"quit")==0)
{
retval=send(sclient,"quit",strlen("quit"),0);
break;
}
else
{
char msg[buf_size];
sprintf(msg,"message received - %s",buf);
retval=send(sclient,msg,strlen(msg),0);
}
}
closesocket(sserver);
closesocket(sclient);
WSACleanup();
}
查了一下午资料,都没搞明白。。希望会的人帮我看一下~~万分感谢 socket 编程
[解决办法]
报什么错??
[解决办法]
int optval = -1;
socklen_t optlen = -1;
// 设置地址和端口号可以重复使用
optval = 1;
optlen = sizeof(optval);
setsockopt(sserver, SOL_SOCKET, SO_REUSEADDR, &optval, optlen);
//绑定前面加上上面的socket属性可 重复使用地址
retval=bind(sserver,(const struct sockaddr*)&addrserv,sizeof(addrserv));