如何查看进程的socket_socket编程1--创建socket

每次创建socket用完的时候都要关闭。

如下用for循环创建了100个socket:
如果不关闭的话,每次创建的sockfd都不一样;
如果关闭的话,每次创建的时候可能用的还是上一次sockfd。
所以,如果创建太多不关闭的话将会耗尽资源,导致创建失败。

linux当中每个进程分配的文件句柄数量是有限的(一般是1024)。
socket在Linux下也是被当作一个文件的。
sockfd:socket生成的sockfd对应文件句柄(针对进程的内部标识)。
linux下有3个默认的已经被进程使用了sockfd:
0表示标准输入,1表示表示标准输出,2表示错误输出
linux下如何查看文件句柄最大数:ulimit -n(默认的一般是1024)
linux下如何修改文件句柄最大数:ulimit -n 3000(修改最大文件句柄为3000)

函数说明:

int socket(int  domain,int type,int protocol)
功能:
     返回描述符
参数说明:
     domain:也叫协议族(family),指定协议
          AF_INEF----TCP/IP协议
          ...
     type:指定socket类型
          SOCK_STREAM----TCP
          SOCK_DGRAM----UDP
          ...
     protocol:公共协议
          0----自动选择type类型对应的默认协议
返回值:
      >=0------创建socket成功
如:  
    int sockfd = socket(AF_INEF,SOCK_STREAM,0);      

Windows下的socket编程(需要多操作两步)

1. 初始化动态链接库

2.引用lib库

//第一步:创建socket
#include<windows.h>
#include<winsock2.h>
#pragma comment(lib,"WS2_32.lib")

#include<stdio.h>

int main(int argc,char *argv[])
{
    //初始化动态链接库
    //加载winsock DLL
    WSADATA ws;
    if (WSAStartup(MAKEWORD(2,2),&ws)!= 0)
    {
        printf ("winsock 初始化失败!n");
        return 1;
    }

    int i;
    for (i=0;i<100;i++)
    {
        int sockfd = socket(AF_INET,SOCK_STREAM,0); //创建socket
        if (sockfd == -1)
        {
            printf ("create socket failed!n");
            return -1;
        }
        printf("[%d]",sockfd); 
        closesocket(sockfd); 
    }
    getchar();
    return 0;
}

说明:
使用工具:windows下的codeblocks
如果运行上面程序报错:undefined reference to `WSAStartup@8'|
原因:缺少socket的链接参数
解决方案:
menu-->Project-->build options-->Debug-->Linker Settings-->Other Linker Options:
加上 “-lws2_32“

Linux下的socket编程

//第一步:创建socket
#include <sys/types.h> //socket的头文件
#include <sys/socket.h> //socket的头文件
#include <unistd.h> //close的头文件

#include<stdio.h>

int main(int argc,char *argv[])
{
    int i;
    for (i=0;i<100;i++)
    {
        int sockfd = socket(AF_INET,SOCK_STREAM,0); //创建socket
        if (sockfd == -1)
        {
            printf ("create socket failed!n");
            return -1;
        }
        printf("[%d]",sockfd);
        close(sockfd);
    }
    getchar();
    return 0;
}

说明:
Linux下编程的头文件和windows的有差异,需要特别注意。
closesocket——close
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值