socket 的一些麻烦

原创 2013年12月02日 18:52:49

在vs2010 上面倒是可以编译的源代码,但是换到2008上,编译就出现了如下错误信息。

“sockaddr_in”: 未声明的标识符

百度谷歌了半个小时多,真烦哪,没找到错在哪里。

包含的头文件是windows.h

最后还是有了结果,就是 在 sockaddr_in 的前头 加上 struct.


还有错误

error C2275: “SOCKET”: 将此类型用作表达式非法

将其放到函数的前头,即WSAStartup(MAKEWORD(2,2),&ws); 之前就可以了。


几乎把所有变量声明都放到了最前端,不过一般的情况下似乎不需要这个样子的。中间声明变量不可以么?有人说可以,有人说不可以。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")

int main(){

    SYSTEMTIME sys;
    WSADATA ws;
    int ret =0;
    SOCKET sListen;
    SOCKET s;
    SOCKET sClient;

    fd_set allSocketSet;
    fd_set readSet;
    fd_set writeSet;

    struct sockaddr_in clientAddr;
    struct sockaddr_in servAddr;

    char bufRecv[100];
    char bufSend[100];
    ret=WSAStartup(MAKEWORD(2,2),&ws);
    if(ret!=0)
    {
        printf("WSATartup() failed!\n");
        return -1;
    }

    
    sListen = socket(AF_INET,SOCK_STREAM,0);
    if(sListen==INVALID_SOCKET)
    {
        return -1;
    }


    servAddr.sin_family = AF_INET;
    servAddr.sin_addr.s_addr = INADDR_ANY;
    servAddr.sin_port = htons(8000);

    ret = bind(sListen,(struct sockaddr*)&servAddr,sizeof(servAddr));
    if(ret==SOCKET_ERROR)
        return -1;

    ret = listen(sListen,5);
    if(ret == SOCKET_ERROR)
        return -1;


    FD_ZERO(&allSocketSet);
    FD_ZERO(&readSet);
    FD_ZERO(&writeSet);
    readSet = allSocketSet;
    writeSet = allSocketSet;

    FD_SET(sListen,&allSocketSet);


    while(1)
    {
        FD_ZERO(&readSet);
        FD_ZERO(&writeSet);

        readSet = allSocketSet;
        writeSet = allSocketSet;

        ret = select(0,&readSet,0,NULL,NULL);
        if(ret == SOCKET_ERROR)
            return -1;

        if(ret >0)
        {
            unsigned int i;
            for(i=0;i<allSocketSet.fd_count;++i)
            {
                s = allSocketSet.fd_array[i];
                if(FD_ISSET(s,&readSet))
                {
                    if(s==sListen)
                    {
                        
                        int len =sizeof(clientAddr);
                        sClient =accept(s,(struct sockaddr*)&clientAddr,&len);
                        FD_SET(sClient,&allSocketSet);
                        GetLocalTime(&sys);
                        //memset(bufSend,0,100);
                        //memcpy(bufSend,&sys,sizeof(SYSTEMTIME));
                        //send(sClient,bufSend,sizeof(bufSend),0);
                    }
                    else{
                        ret = recv(s,bufRecv,100,0);
                        if(ret==SOCKET_ERROR)
                        {
                            DWORD err = WSAGetLastError();
                            if(err == WSAECONNRESET)
                                printf("client closed by force\n");
                            else
                                printf("recv() failed");

                            FD_CLR(s,&allSocketSet);
                            break;
                        }


                        FD_CLR(s,&allSocketSet);
                        printf("%s",bufRecv);
                        bufRecv[0]='\0';

                        //                        memset(bufSend,0,100);
                        //                        memcpy(bufSend,&sys,sizeof(SYSTEMTIME));
                        //                        send(s,bufSend,sizeof(bufSend),0);

                    }

                }

            }



        }





    }

}


竖直ProgressBar(VerticalProgressBar),不用那么麻烦

ProgressBar(设置了progressBarStyleHoriziontal) 竖直ProgressBar 发现一个bug,就是竖直方向的时候,如果设置宽度大于高度,显示出来的竖直Progre...

超级靓女!麻烦啊。。。

  • 2009年04月07日 22:09
  • 31KB
  • 下载

poj 2353 双向dp(麻烦的办公室盖章)

题意:给定一个n*m的整数数组。现在要从第一行中的任意点移动到最后一行的任意点,要求每次只能移动一个距离(向左右或者向下,不能向上)。求路径所包含数值之和最小的时候的路径。 思路:dp。dp[i][j...

很久以前写的一个java模拟扑克牌洗牌发牌的小程序,学的知识少写的比较麻烦,不过也放上来吧

package org.phz.poke; import java.util.ArrayList; import java.util.Collections; import java.util.L...

EasyPHP不用太麻烦的去配PHP+APACHE

  • 2010年03月24日 14:45
  • 14.7MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:socket 的一些麻烦
举报原因:
原因补充:

(最多只允许输入30个字)