首页 > 其他 > 详细

open_clientfd(char* hostname,int port)和open_listenfd(int port)

时间:2014-03-05 17:13:38      阅读:710      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/wait.h>

typedef struct sockaddr SA;

int open_clientfd(char* hostname,int port)
{
    int clientfd;
    struct hostent * hp;
    struct sockaddr_in serveraddr;
    char* msg;
    
    /*创建socket*/
    if((clientfd=socket(AF_INET,SOCK_STREAM,0))<0)
    {
        msg="client socket() error!\n";
        write(STDOUT_FILENO,msg,strlen(msg));
        return -1;
    }
    msg="client socket() success!\n";
    write(STDOUT_FILENO,msg,strlen(msg));
    
    /*填写server的ip地址和port*/
    if((hp=gethostbyname(hostname))==NULL)
    {
        msg="client gethostbyname() error!\n";
        write(STDOUT_FILENO,msg,strlen(msg));
        return -2;
    }
    msg="client gethostbyname() success!\n";
    write(STDOUT_FILENO,msg,strlen(msg));
    
    bzero((char*)&serveraddr,sizeof(serveraddr));
    serveraddr.sin_family=AF_INET;
    serveraddr.sin_port=htons(port);
    bcopy((char*)hp->h_addr_list[0],(char*)&serveraddr.sin_addr.s_addr,hp->h_length);
    
    /*建立连接*/
    if(connect(clientfd,(SA*)&serveraddr,sizeof(serveraddr))<0)
    {
        msg="client connect() error!\n";
        write(STDOUT_FILENO,msg,strlen(msg));
        return -3;
    }
    msg="client connect() success!\n";
    write(STDOUT_FILENO,msg,strlen(msg));
    
    return clientfd;
}

int open_listenfd(int port)
{
    int listenfd,optval;
    struct sockaddr_in serveraddr;
    char* msg;
    
    /*创建socket*/
    if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
    {
        msg="server socket() error!\n";

        write(STDOUT_FILENO,msg,strlen(msg));
        return -1;
    }
    msg="server socket() success!\n";
    write(STDOUT_FILENO,msg,strlen(msg));
    
    /*配置服务器使得它能被立即终止和重启*/
    if(setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,(const void *)&optval,sizeof(int))<0)
    {
        msg="server setsockopt() error!\n";
        write(STDOUT_FILENO,msg,strlen(msg));
        return -2;
    }
    msg="server setsockopt() success!\n";
    write(STDOUT_FILENO,msg,strlen(msg));
    
    /*绑定服务端的ip和端口*/
    bzero((char*)&serveraddr,sizeof(serveraddr));
    serveraddr.sin_family=AF_INET;
    serveraddr.sin_port=htons((unsigned short)port);
    serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
    if(bind(listenfd,(SA*)&serveraddr,sizeof(serveraddr))<0)
    {
        msg="server bind() error!\n";
        write(STDOUT_FILENO,msg,strlen(msg));
        return -3;
    }
    msg="server bind() success!\n";
    write(STDOUT_FILENO,msg,strlen(msg));
    
    /*创建listen*/
    if(listen(listenfd,1024)<0)
    {
        msg="server listen() error!\n";
        write(STDOUT_FILENO,msg,strlen(msg));
        return -3;
    }
    msg="server listen() success!\n";
    write(STDOUT_FILENO,msg,strlen(msg));
    
    return listenfd;
}
bubuko.com,布布扣

open_clientfd(char* hostname,int port)和open_listenfd(int port),布布扣,bubuko.com

open_clientfd(char* hostname,int port)和open_listenfd(int port)

原文:http://www.cnblogs.com/jiayith/p/3581215.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!