免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 893 | 回复: 0
打印 上一主题 下一主题

TCP socket, select model in linux [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-10 13:14 |只看该作者 |倒序浏览
#ifndef _ALL_H
#define _ALL_H
// ANSC C/C++
#include
#include
#include
#include
#include
// linux
#include
#include
#include
#include
#include
#include
#include
#include         // time
#include     
#include
#include
// micro
//#define OutErrStr(info) (printf("Error :    %s\n", info))
//#define OutErrInt(info) (printf("Error :    %d\n", info))
#define BUFF_SIZE 1024 * 1
#endif
// tcpsrv.c
#include "all.h"
static char chBuff[BUFF_SIZE] = {0};
// function, start TCP server
static bool startServer(int argc, char *argv[])
{
    printf("Run ...\n");
    while (argc  nNewSocket)
        {
            nMax = nSocket;
        }
        else
        {
            nMax = nNewSocket;
        }
        
        switch (select(nMax + 1, &fdRead, &fdWrite, NULL, &timeout))
        {
        case -1 :    // error
            printf("call select() function failure\n");
            break;
        case 0    :    // time out
            break;
        default :
            if (FD_ISSET(nSocket, &fdRead))
            {
                // 接受一个连接
                unsigned int uLen = sizeof(struct sockaddr_in);
                if (-1 == (nNewSocket = accept(nSocket, (struct sockaddr *)&ClientAddr, &uLen)))
                {
                    //printf("Warning:    accept connecting failed, continue ......\n");
                    //printf("-----------------------------------\n\n");
                    //continue;
                    //return false;
                }
                else
                {
                    printf("Accept one connecting from IP [port] :    %s [%d]\n",\
                           inet_ntoa(ClientAddr.sin_addr), ntohs(ClientAddr.sin_port));
                }
            }
            if (FD_ISSET(nNewSocket, &fdWrite))
            {
                // 在新的socket上接收数据
                if ( -1 == recv(nNewSocket, chBuff, sizeof(chBuff), 0) )
                {
                    //printf("Warning:    NewSocket riceive data failed. [errno = %d]\n", errno);
                    //printf("-----------------------------------\n\n");
                }
                else if (strlen(chBuff) > 0)
                {               
                    printf("Riceive data is [%d bytes]:    %s\n", strlen(chBuff), chBuff);
                    memset(chBuff, 0, sizeof(chBuff));
                    //usleep(1000);
                }
            }
        }
    }
    // *************************************************
    if (nNewSocket)
    {
        close(nNewSocket);
    }
    if (nSocket)
    {
        close(nSocket);
    }
    return true;
}
/*
* Input:    IP address, port
*/
int main(int argc, char *argv[])
{
    if (startServer(argc, argv))
    {
        printf("Start TCP server OK\n");   
    }
   
    return 0;
}
# tcpsv makefile
objets = main.o
rubbish = $(objets) tcp_server
tcp_server : main.o
    g++ -g -o tcp_server main.o
main.o : main.c all.h
    g++ -g -c main.c
.PHONY : clean
clean :
    -rm $(rubbish)
   
# end makefile
   
// tcp client all.h
// wenxy created on 2005/04/12,AM
// All copyright reserved.
#ifndef _ALL_H
#define _ALL_H
// ANSC C/C++
#include
#include
#include
#include
// linux
#include
#include
#include
#include
#include
#include
#include
#include
#include
// micro
//#define OutErrStr(info) (printf("Error :    %s\n", info))
//#define OutErrInt(info) (printf("Error :    %d\n", info))
#define BUFF_SIZE 1024 * 1
#endif
// main.c, tcp client
#include "all.h"
//
char chBuff[BUFF_SIZE] = "This is clinet init data,\n这是初始化数据。\n";
// function
// connecting the TCP server
static bool StartClient(int argc, char *argv[])
{
    while (argc

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26185/showart_1404124.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP