免费注册 查看新帖 |

Chinaunix

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

<求助>简单linux socket程序,服务器write客户端read,不能成功! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-23 23:16 |只看该作者 |倒序浏览
<求助>简单linux socket程序,服务器write客户端read,不能成功!
这是客户端程序, 运行环境suse10,

// socket client

#include"mysocketdef.h"


// inner func declare
int my_inputstr(FILE* fp, int sockfd);
int my_readServStr(int sockfd);

int main(int argc, char* argv[])
{
    int sockfd;
    struct sockaddr_in servaddr;
    int ret ;
   
    if( 2 != argc )
    {
        printf(" client usage:myclient <a.b.c.d>!\r\n");
        return 1;
    }

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if( sockfd < 0 )
    {
        printf("client create socket failed!ret = %d\r\n", sockfd);
        return 1;
    }

    // give server address and port
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(SERV_PORT);
    ret = inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
    if( ret != 1 ) // success return 1 ??
    {
        printf("client call inet_pton failed ! pls check the dest ip !\r\n");
        return 1;
    }

    ret = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
    if( ret < 0 )
    {
        printf("client call connect failed !\r\n");
        return 1;
    }

    //my_inputstr(stdin, sockfd);
    my_readServStr(sockfd);
   
    exit(0);
}

int my_readServStr(int sockfd)
{
    int ret;
    char recvcxt[MAX_SOCK_BUFFLEN + 1] = {0};
   
    ret = read( sockfd, recvcxt, MAX_SOCK_BUFFLEN);
    if( ret <= 0 )
    {
        printf("client call read failed! read n=%d", ret);
        return 1;
    }

    fputs(recvcxt, stdout);
   
    return 0;
}

论坛徽章:
0
2 [报告]
发表于 2006-10-23 23:17 |只看该作者

<求助>简单linux socket程序,服务器write客户端read,不能成功!-2

这是服务器端程序

#include "mysocketdef.h"


int my_echo_str(int sockfd);
int my_sendData(int connfd);


int main(int argc, char** argv)
{
    int listenfd, connfd;
    struct sockaddr_in  cliaddr, servaddr;
    int clilen;
    pid_t childpid ;
    int ret;
    char cliaddrstr[32] ={0};


    listenfd = socket( AF_INET, SOCK_STREAM, 0);
    if( listenfd < 0 )
    {
        printf("create socket failed!,ret=%d\r\n", listenfd);
        return 1;
    }
   
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(SERV_PORT);
   
    ret = bind( listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
    if( ret < 0 )
    {
        printf("bind failed !ret=%d\r\n", ret);
        return 1;
    }

    ret = listen(listenfd, MAX_LISTEN_NUM);
    if( ret < 0 )
    {
        printf("listen failed! ret = %d\r\n", ret );
        return 1;
    }

    while(1)
    {
        clilen = sizeof(cliaddr);
        connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &clilen);
        if( connfd < 0 )
        {
            printf("socket accept failed !ret =%d\r\n", connfd);
            return 1;
        }
        printf("server get connect from %s\r\n", inet_ntop(AF_INET, &cliaddr.sin_addr, cliaddrstr, 32));
        
        childpid = fork();        
        if( 0 == childpid )
        {
            // child process
            close(listenfd);
            //my_echo_str(connfd);
            my_sendData(connfd);
            exit(0);
        }
        else
        {
            // parent process
            close(connfd);
        }
    }
}

int my_sendData(int connfd)
{
    write(connfd, "hello!client!", sizeof("hello!client!"));
    return 0;
}

论坛徽章:
0
3 [报告]
发表于 2006-10-23 23:20 |只看该作者
我照着unix network programming 敲的,看起来简单的程序,怎么就不灵呢?
本来是一个echo的,不行,我就改成最简单的,服务器write,客户端read,还不行。。。
服务器起来监听9999端口,客户端起来之后再用netstat -an|grep 9999看,有2个链路,
一个依然Listen,还有一个在 syn_sent态,求助!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP