Linux编程4.10 网络编程-数据传输

1、发送数据

	
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t nbytes, int flag);
返回:成功返回发送字节数,出错返回-1

ssize_t sendto(int sockfd, const void *buf, size_t nbytes, int flag,const struct sockaddr*destaddr, socklen t destlen);
返回:成功返回发送的字节数,出错返回-1

ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flag);
返回:成功返回发送字节数,出错返回-1

struct msghdr {
               void         *msg_name;       /* Optional address */
               socklen_t     msg_namelen;    /* Size of address */
               struct iovec *msg_iov;        /* Scatter/gather array */
               size_t        msg_iovlen;     /* # elements in msg_iov */
               void         *msg_control;    /* Ancillary data, see below */
               size_t        msg_controllen; /* Ancillary data buffer len */
               int           msg_flags;      /* Flags (unused) */
           };

示例

send(cour,"您好!",strlen("您好!"),0);

sendto(sockdfd,ptr,size,0,(struct sockaddr*)&clientaddr,len);

2、接收数据


#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);


返回:用于从套接字接消息, 返回消息的字节数,无消息返回0,出错返回-1

示例:

recv(aasockfd,str,1024,0);

//接受客户端的数据报文
if(recvfrom(sockfd,buffer,sizeof(buffer),0,(struct sockaddr*)&clientaddr,&len)<0)
{
	perror("recvfrom error");
}

3、域名地址解析

struct hostent{
	char *h_name;	    /*正式主机名*/
	char **h_aliases;   /*别名,字符串数组*/
	int h_addrtype;     /*协议类型*/
	int h_length;       /*网络地址大小*/
	char **h_addr_list;	/*指向网络地址的指针*/
}
//用域名或者主机名获取地址
inth length;
#include <netdb.h>
struct hostent *gethostent(void);
struct hostent*gethostbyname(const char *hostname);
void sethostent(int stayopen);
void endhostent(void);

示例

void out_addr(struct hostent *h)
{
	//在结构中 h_addrtype 是一个整形类型的宏
	printf("hostame:%s\n",h->h name);
	printf("addrtype:%d\n",h->h addrtype);
	printf("addrtype%s\n"h->h addrtype==AF INET?"IPV4":"IPV6");
	
	char ip[16]={0};
	//在结构中h_addr_list是一个网络字节序的地址,要把它转换成点分进制
	inet ntop(h->h addrtype,h->h addr list[o],ip,sizeof(ip));
	printf("ip address:%s\n",ip);
}


int main(int argc,char** argv)
{
	if(argc<2){
		fprintf(stderr,"usage:%s host\n",argv[0]);
		exit(1);
	}
	struct hostent *h;
	while((h=gethostent())!=NULL)
	{
		if(!strcmp(argv[1],h->h_name))
		{
			out_addr(h);
		}
	}
}

查看本地配置文件:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值