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

socket编程碰到bind error;求大神指导!纠结了一下午都不知道为啥。

2013-08-24 
socket编程遇到bind error;求大神指导!纠结了一下午都不知道为啥。。#include winsock2.h#include stdio.

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));



[解决办法]
getlasterror能用不?
[解决办法]
端口被占用?

热点排行