unix网络编程(1)

今天将以一个客户端/服务器的实例程序好好介绍一些unix网络编程的基础知识,不会过多的涉及理论方面的,直接从代码入手去介绍。

在网络编程中,最常见的就是C/S结构了:


或者是多个客户对应一个服务器的模式。

下图就很好的说明了在C/S架构中使用到的一些协议:


这些协议我们将会在后面进行介绍。


一:客户端源码

#include	"unp.h"

int main(int argc, char **argv)
{
	int					sockfd, n;
	char				recvline[MAXLINE + 1];
	struct sockaddr_in	servaddr;

	if (argc != 2)
		err_quit("usage: a.out <IPaddress>");

	if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		err_sys("socket error");

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port   = htons(13);	/* daytime server */
	if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
		err_quit("inet_pton error for %s", argv[1]);

	if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
		err_sys("connect error");

	while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
		recvline[n] = 0;	/* null terminate */
		if (fputs(recvline, stdout) == EOF)
			err_sys("fputs error");
	}
	if (n < 0)
		err_sys("read error");

	exit(0);
}
这是一个简单的客户端源码,却包含了网络编程的基础知识,我们就来好好理清这个程序。

进入main函数之后,

1:定义了int sockfd,n;

sockfd是一个文件描述符,在unix系统中打开一个文件就会产生一个文件描述符,它与文件相对应;也想当于是windows中的句柄。

把对网络的操作抽象为对文件的操作。

2:struct sockaddr_inservaddr;

定义了一个sockaddr_in类型的结构体,那么sockaddr_in是什么结构体呢?

/* Structure describing an Internet (IP) socket address. */
#define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/
struct sockaddr_in {
  __kernel_sa_family_t 	sin_family;	/* Address family		*/
  __be16		sin_port;	/* Port number			*/
  struct in_addr	sin_addr;	/* Internet address		*/

  /* Pad to size of `struct sockaddr'. */
  unsigned char		__pad[__SOCK_SIZE__ - sizeof(short int) -
			sizeof(unsigned short int) - sizeof(struct in_addr)];
};
sockaddr_in是用来描述IPv 4套接字地址结构的,

sin_family表明这个套接字说使用的网际协议的,通常取值是AF_INET 和AF_INET6。

sin_port表示要连接的服务器端口,光有IP是不行的,服务器上有这么多的进程,服务器这么知道客户端所需要访问的是哪个进程,因此

端口就显得尤为重要了。


先占个坑。。。。


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值