免费注册 查看新帖 |

Chinaunix

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

linux tcp 服务器客户端发送接收数据epool模型(例二) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-14 13:02 |只看该作者 |倒序浏览

/*************************************************************************
Author: Wan Xinshuo
Created Time: 2009年04月14日 星期二 11时33分18秒
File Name: server02.c
Description:
************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXLINE 100
#define OPEN_MAX 100
#define LISTENQ 20
#define SERV_PORT 8889  
#define INFTIM 1000
void setnonblocking(int sock)
{
    int opts;
    opts=fcntl(sock,F_GETFL);
    if(opts
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXDATASIZE 100 // max number of bytes we can get at once
int main(int argc, char *argv[])
{
    int sockfd, numbytes;
    char buf[MAXDATASIZE];
    struct hostent *he;
    struct sockaddr_in their_addr; // connector'saddress information
    if (( argc == 1) || (argc==2) ) {
        fprintf(stderr,"usage: client hostname\nEx:\n$./client01 ip port\n");
        exit(1);
    }
    if ((he=gethostbyname(argv[1])) == NULL) { // get the host info
        herror("gethostbyname");
        exit(1);
    }
    if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        exit(1);
    }
    their_addr.sin_family = AF_INET; // host byte order
    their_addr.sin_port = htons(atoi(argv[2])); // short, network byte order
    their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);
    if (connect(sockfd, (struct sockaddr *)&their_addr,
                                          sizeof their_addr) == -1) {
        perror("connect");
        exit(1);
    }
   
    while( 1 )
    {
    if(  send(sockfd, "hello, this is client message!", strlen("hello, this is client message!"), 0 ) == -1 )   
    {
        perror("send");
    }
    if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1)
    {
        perror("recv");
    }
    else if( numbytes == 0 )
    {
        printf("Remote server has shutdown!\n");
        break;
    }
    buf[numbytes] = '\0';
    printf("Received: %s \n",buf);
    sleep(1);
    }
    close(sockfd);
    return 0;
}
编译:
gcc -o server02 server02.c
gcc -o client01 client01.c
运行:
$server02 8889
$client01  ip 8889
注: "ip" 为 server02所在的ip





本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/44773/showart_1899964.html

论坛徽章:
0
2 [报告]
发表于 2009-11-06 00:25 |只看该作者
汗,这也叫epool!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP