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

#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;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值