您的位置:首页 > 理论基础 > 计算机网络

网络 客户端 多种方法 建立与服务端的连接 接口:服务器名,IP socket connect

2007-06-07 16:37 801 查看
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#include <errno.h>

#include <netdb.h>//gethostbyname
//#include <cygwin/in.h>//struct in_addr(<linux/in.h>)
#include <netinet/in.h>

#include <sys/socket.h>

typedef struct sockaddr SA;
typedef struct sockaddr_in SIN;

int main()
{
int ip =0;
int name;
ip = open_clientfd("61.152.234.71",80,2);
name = open_clientfd("www.sohu.com",80,1);
//
printf("result is %d/n",name);
printf("result is %d/n",ip);
}

//type == 1 gethostbyname
//type == 2 gethostbyaddr
int open_clientfd(char * host,int port,int type)
{
int client_fd;
struct hostent *hp;
struct sockaddr_in serveraddr;

if ((client_fd = socket(AF_INET,SOCK_STREAM,0))<0)
{
return -1;
}
bzero((char *)&serveraddr,sizeof serveraddr);
serveraddr.sin_family = AF_INET;
if (type == 1)//通过机器名来获得hp
{
if ((hp = gethostbyname(host))==NULL)
{
return -2;
}
printf("the h_addr is %02X/n",hp->h_addr);
bcopy((char *)(hp->h_addr),(char *)&serveraddr.sin_addr.s_addr,hp->h_length);
}
if (type == 2)
{
//方法二
//serveraddr.sin_addr.s_addr = inet_addr(host);

//方法三
struct in_addr i;
inet_aton(host,&i);
serveraddr.sin_addr = i;
}
// 方法一
// if (type == 2)//通过IP来获得hp
// {
// if ((hp = gethostbyaddr(host,4,AF_INET))==NULL)
// {
// return -2;
// }
// bcopy((char *)(hp->h_addr),(char *)&serveraddr.sin_addr.s_addr,hp->h_length);
// }

serveraddr.sin_port = htons(port);

if (connect(client_fd,(SA *)&serveraddr,sizeof serveraddr)<0)
{
return -3;
}

return client_fd;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐