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

                    }

                }

            }



        }





    }

}


socket发送方发送速率过快问题

在下原本要写一个利用SOCKET进行文件传输的程序,结果在测试过程中发现一旦开始传输,程序在发送10个包之内的时间里就会出现丢包现象,后面接收到的包读出来全是错误。 在百思不得其解的情况下不断的写简化...
  • jeason29
  • jeason29
  • 2015年09月08日 13:36
  • 2955

PowerPoint的一些麻烦

如果你在过去25年内在一个西方世界的办公室里工作过,你可能就坐在一个PowerPoint的幻灯演示面前。但是这里就有一个问题。用幻灯片砖家(- -|||)Max Atkinson的话来说就是那些幻灯片...
  • yestotofu
  • yestotofu
  • 2010年02月18日 23:19
  • 310

Socket 常用函数列表

转换函数IP地址转换函数:unsigned long inet_addr (const char *cp);inet_addr将一个点分十进制IP地址字符串转换成32位数字表示的IP地址(网络字节顺序...
  • legion8169
  • legion8169
  • 2007年06月02日 16:09
  • 1948

无符号数带来的一些麻烦

c语言中存在unsigned int等无符号类型,在这些类型给我们在按位运算等操作带来便利的同时,也带了了一些不必要的麻烦,如下: 1. 强制类型转换后不一定是我们需要的结果 2.会造成x...
  • liliuteng
  • liliuteng
  • 2013年07月07日 16:34
  • 452

习惯了傻瓜式安装后,安装MySQL竟要这么麻烦?

习惯了傻瓜式安装后,安装MySQL竟要这么麻烦?
  • fwj_ntu
  • fwj_ntu
  • 2017年10月15日 17:43
  • 360

注册太麻烦,

不没用就这么麻烦,我看这网站长不了。
  • hhc0704
  • hhc0704
  • 2016年01月11日 00:23
  • 99

Socket所遇到的坑

本文记录使用Socket通信时所遇到坑,不断更新。目前记录三个问题: 建立Socket连接 使用输入流和输出流进行通信 使用心跳保持Socket连接 建立Socket连接Socket连接需要一个Ser...
  • Bingtang_blog
  • Bingtang_blog
  • 2017年03月07日 21:36
  • 590

麻烦麻烦真麻烦。。。。

郁闷死了,这个倒霉的图还没有截,就发现分辨率不对头。。。唉。。。后台很多东西都差不多了,构架的可以了。。。问题就是这个。。。唉!加油啦。。 想说赚钱不容易啊!...
  • TJUsecretfish
  • TJUsecretfish
  • 2006年03月07日 09:36
  • 694

最近做socket保持长连接的一些心得

来自:http://s.yanghao.org/program/viewdetail.php?i=2945 自己写的客户端马上要发布了,忽然发现了一大堆问题,主要集中在与服务器的TCP连接经常莫名断...
  • ArvinStudy
  • ArvinStudy
  • 2013年03月01日 12:18
  • 7080

异步socket优雅的关闭-CancelIO和SO_LINGER

我们在利用IOCP(完成端口)进行程序设计的时候,经常要关闭一些不满足条件的套接字。假如我们直接采用closesocket方法进行关闭的话,绑定到IO端口的此套接字的未发送的数据就会丢失,这种情况是我...
  • liujiayu2
  • liujiayu2
  • 2017年09月08日 13:02
  • 499
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:socket 的一些麻烦
举报原因:
原因补充:

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