#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <unistd.h>
 #include <pthread.h>
 #include <errno.h>
 #define DAEMON_PORT                8888
 #define MAX_LISTEN                1024

 ];

 int adminserver();
 void pthread_adminserver(int client_sd);

 int main(int argc, char** argv){
     strcpy(get_manager_ip, argv[]);
     adminserver();
 }
 int adminserver()
 {
     ;
     ;
     ;
     ;
     FILE *fp;
     int res;
     int client_sd;
     int server_sd;
     int reuse_addr;
     pthread_t p_tcpserver;
     int client_addr_size ;

     struct sockaddr_in client_addr;
     struct sockaddr_in server_addr;
     ];
     ];
     ];

     char *pt;
     char *edit;

     sprintf(cmd_ip,"ifconfig %s |grep 'addr:' >/get_manager_ip",get_manager_ip);
     system(cmd_ip);

     fp = fopen("/get_manager_ip","rb");
     if (fp == NULL)
     {
         printf("Cann't open get_manger_ip file!\n");
         exit(-);
     }

     memset(line,,);
     fgets(line,,fp);
     fclose(fp);

     pt=strstr(line, "addr:");
     if (pt != NULL)
     {
         pt+=;
         edit=strtok(pt," ");
         strcpy(listen_ip,edit);
     }

     server_sd=socket( AF_INET, SOCK_STREAM,  );

     )
     {
         printf("ERROR: Cann't create socket!!!\n");
         exit(-);
     }

     bzero(&server_addr, sizeof(struct sockaddr));
     server_addr.sin_family = AF_INET;
     server_addr.sin_addr.s_addr=inet_addr(listen_ip);
     server_addr.sin_port   = htons(DAEMON_PORT);  

     reuse_addr = ;
      )
     {
         printf("setsockopt error\n");
         close(server_sd);
            ;
     }

     res = bind(server_sd, (struct sockaddr *)&server_addr, sizeof(server_addr));
      )
     {
         printf("Cann't bind!res = %d,erro:%d, reason:%s.\n",res, errno, strerror(errno));
         close(server_sd);
         exit(-);
     }  

      ) {
         printf("Cann't listen!\n");
         close(server_sd);
         exit(-);
     }

     )
     {

         client_addr_size = sizeof(client_addr);
         client_sd = accept( server_sd, (struct sockaddr *)&client_addr, (socklen_t *)&client_addr_size);
         )
         {
             printf("Could not create thread check_work_time\n");
             return ;
         }
     }
     close(server_sd);
     exit();
 }

 void pthread_adminserver(int client_sd)
 {
     ;
     int rc;
     ];
      )
         {             //线程处理某个客户端的连接
             memset(buffer,,);
             rc=read(client_sd,buffer,);
             ){
             close(client_sd);  //关闭线程处理的客户端连接
             pthread_exit();//终止该线程
             }
             printf("read date:\"%s\"\n",buffer);

         }
         close(client_sd);  //关闭线程处理的客户端连接
         pthread_exit();//终止该线程
 }

通过线程去处理单条tcp连接,传入网卡名来获取本地所需使用的ip地址,(不同的linux系统需要做点修改,在查询关键字 “addr:”处)

linux c socket 并发 服务端的更多相关文章

  1. linux c socket笔记 -服务端

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types. ...

  2. java socket实现服务端,客户端简单网络通信。Chat

    之前写的实现简单网络通信的代码,有一些严重bug.后面详细写. 根据上次的代码,主要增加了用户注册,登录页面,以及实现了实时显示当前在登录状态的人数.并解决一些上次未发现的bug.(主要功能代码参见之 ...

  3. linux下svn(subversion)服务端添加工程及配置权限

    linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...

  4. linux网络编程学习笔记之三 -----多进程并发服务端

    首先是fork()函数.移步APUE 8.3.  比較清晰的解释能够參考http://blog.csdn.net/lingdxuyan/article/details/4993883和http://w ...

  5. python网络编程:socket、服务端、客户端

    本文内容: socket介绍 TCP: 服务端 客户端 UDP: 服务端 客户端 首发时间:2018-02-08 01:14 修改: 2018-03-20 :重置了布局,增加了UDP 什么是socke ...

  6. Socket客户端/服务端简单实例

    1.client端 package demo.socket; import java.io.BufferedReader;import java.io.IOException;import java. ...

  7. java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&服务端代码

    java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12: ...

  8. 在windows系统上安装VMware Workstation虚拟机,然后在虚拟机VMware Workstation上安装linux系统,在linux系统安装xshell的服务端,在windows系统上安装xshell。用windows系统上的xshell连接到linux

    第一步:安装xshell: 去百度   xshell ,然后安装一下就可以了.就是普通的软件安装,在这里不做过多的接收. 第二步:安装虚拟机VMware Workstation 百度安装,不做过介绍 ...

  9. JAVA Socket获取服务端信息

    1.Socket.getInetAddress(),获取服务端地址. 2.Socket.getPort(),获取服务端端口.

随机推荐

  1. dfs算法

    一般bfs算法都是使用递归 //下面简单的代码 visited[Max]; dfs(_graph g,int vo){ print(vo); visited[vo]=1 for(int i=0;i&l ...

  2. 20170305Meetup Git、heroku drop db

    Rails中,给link_to添加上action和class样式,内部文本 <%= link_to product_path(product),{ :controller => 'cont ...

  3. Dell M102ZD-128 —— 拿XP拯救你

    查过新浪博客上的记录: http://blog.sina.com.cn/s/articlelist_1259160330_7_1.html 2011年6月买了这台 Dell Inspiron M102 ...

  4. 10分钟精通SharePoint - SharePoint定位

    平台 – "一栋楼房的框架结构" 扩展 – "用户可以根据自己需要随意装修房间"集成 – "插拔式的系统集成能力"业务– "既是全 ...

  5. 引用类型-----Object

    本文章转载至:https://segmentfault.com/a/1190000003984584 关于引用类型的概念: 引用类型:引用类型的值(对象)是引用类型的一个实例: 对象:是某个特定引用类 ...

  6. iOS开发之UIApplication和delegate

    1.概述 所有的移动操作系统都有个致命的缺点:app很容易受到打扰.比如一个来电或者锁屏会导致app进入后台甚至被终止. 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统 ...

  7. C—动态内存分配之malloc与realloc的区别

    在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap).还有另一个内存区域,称为堆栈(stack),其中的空间分配给函数的参数和本地变量.在执行完该函数后,存储参数和本地变量的内存空间就会 ...

  8. iOS 内存泄漏

      我一直以为现在都是自动内存管理了,还哪有什么内存泄漏啊.一检测才知道,不是我太相信Xcode了,就是我太单纯了.iOS开发中遇到的内存泄漏主要有几下几种: (1)对象不能释放.使用Core Fou ...

  9. This Handler class should be static or leaks might occur Android

    首先解释下这句话This Handler class should be static or leaks might occur,大致意思就是说:Handler类应该定义成静态类,否则可能导致内存泄露 ...

  10. 不可不知的 Android strings.xml 那些事

    相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...