UNIX网络编程

Posted Public Bug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UNIX网络编程相关的知识,希望对你有一定的参考价值。


1.概述
UNIX网络编程(一)

UNIX网络编程(一)


UNIX网络编程(一)


通过计算机网络通信首先确定程序相互通信所用的协议。在深入设计一个协议的细节之前,应该从高层次决断通信由哪个程序发起以及响应在何时产生的。

举例来说,一般认为Web服务器程序是一个长时间运行的(即所谓的守护程序,daemon),它只在响应来自网络的请求时才发送网络消息。协议的另一端是Web客户程序,如某种浏览器,写服务器进程的通信总是由客户进程发起。大多数网络应用就是按照划分成客户(client)和服务器(server)来组织的。在设计网络应用时,确定总是由客户发起请求往往能够简化协议和程序本身。当然一些较为复杂的网络应用还需要异步回调(asynchronous callback)通信,也就是由服务器向客户发起请求消息。然而坚持采纳上图所示的基本客户/服务器模型的网络应用。


UNIX网络编程(一)


通常客户每次只与一个服务器通信,不过以使用Web浏览器为例,我们也许在10分钟内就可以与许多不同的Web服务器通信。从服务器的角度来看,一个服务器同时与多个客户通信并

不稀奇,见下图。


UNIX网络编程(一)

可认为客户与服务器之间是通过某个网络协议通信的,但实际上,这样的通信通常涉及多个网络协议层。TCP/IP协议族,也称为网际协议族。举例来说,Web客户与服务器之间使用TCP(Transmissiong Control Protocol,传输控制协议)通信。TCP又转而使用(Internet Protocol,网际协议)通信,IP在通过某种形式的数据链路层通信,如果客户与服务器处于同一个以太网,就有如下图的通信层次。

UNIX网络编程(一)

尽管客户与服务器之间使用某个应用协议通信,传输层却使用TCP通信。注意,客户与服务器之间的信息流在其中一端是向下通过协议栈的,跨越网络后,在另一端则是向上通过协议栈的。另外注意,客户和服务器通常是用户进程,而TCP和IP协议通常是内核中协议栈的一部分。我们在图上右边标出了4个层。


UNIX网络编程(一)


同一网络应用的客户和服务器无需上图所示在同一个局域网(local area network,LAN)。例如,下图展示了外干不同局网中的客户和服务器,而这两个局域网是使用路由器(router)连接到广域网的。


2.一个简单的时间获取客户程序
看完简介TCP 实操一波
#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);}

如果编译该程序生成默认的a.out可执行文件后执行它,我们会得到如下结果:我们的输入solaris % a.out 206.168.112.96程序的输出Mon May 26 20:58:4o 2003

以上是关于UNIX网络编程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

Unix环境高级编程书上的第一个例程如何运行(附代码)