Bgnet
Beej’s Guide Network to Programming
xiaobin80
my TL
展开
-
5.6 accept() — “谢谢你来调用端口3490”
5.6. accept() ---“谢谢你来调用端口3490” 准备好了,系统调用accept() 会有点古怪的地方的!你可以想象发生这样的事情:有人从很远的地方通过一个你在侦听 (listen()) 的端口连接(connect()) 到你的机器。它的连接将加入到等待接受 (accept()) 的队列中。你调用accept() 告诉它你有空闲的连接。它将返回一个新的套接字文件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口,新的在准备发送 (send()) 和接收 (recv(翻译 2020-03-25 14:18:47 · 2918 阅读 · 0 评论 -
6. 客户/服务器端背景知识
6.客户/服务器端背景知识 这里是个客户--服务器的世界。在网络上的所有东西都是在处理客户进 程和服务器进程的交谈。举个telnet 的例子。当你用telnet (客户)通过23 号端口登陆到主机,主机上运行的一个程序(一般叫 telnetd,服务器)激活。 它处理这个连接,显示登陆界面,等等。图2:客户机和服务器的关系 图 2 说明了客户和服务器之间的信息交换。 注意,客户--服务器之间可以使用SOCK_STREAM、SOCK_DGRAM或者其它(只翻译 2015-03-26 17:20:57 · 3770 阅读 · 0 评论 -
5.11 gethostname() ---- 我是谁?
5.11. gethostname() ---我是谁? 甚至比getpeername() 还简单的函数是 gethostname()。它返回你程序所运行的机器的主机名字。然后你可以使用 gethostbyname() 以获得你的机器的 IP 地址。 下面是定义: #include <unistd.h>intgethostname(char *hostname, size_t size);参数很简单:hostname是一个字符数组指针,它将在函数返回时保存主机名。siz翻译 2014-05-19 18:26:25 · 3555 阅读 · 0 评论 -
5.10 getpeername() --- 你是谁?
5.10 getpeername() --- 你是谁? 这个函数太简单了。它太简单了,以至我都不想单列一章。但是我还是这样做了。函数 getpeername() 告诉你在连接的流式套接字上谁在另外一边。函 数是这样的:#include<sys/socket.h>intgetpeername(int sockfd, struct sockaddr *addr, int *addrlen);sockfd 是连接的流式套接字的描述符。addr是一个指向结构 struct sockad翻译 2014-04-09 21:45:51 · 7352 阅读 · 0 评论 -
5.9 close()和shutdown() — 别让我再见到你的脸!
5.9. close()和shutdown() ---别让我再见到你的脸! 你已经整天都在发送(send()) 和接收 (recv()) 数据了,现在你准备关闭你的套接字描述符了。这很简单,你可以使用一般的 Unix 文件描述符的 close() 函数:int close(sockfd); 它将防止套接字上更多的数据的读写。任何在另一端读写套接字的企 图都将返回错误信息。如果你想在如何关闭套接字上有多一点的控制,你可以使用函数 shutdown()。它允许你将一定方向翻译 2014-02-07 03:28:00 · 4020 阅读 · 0 评论 -
5.8 sendto和recvfrom() ---和我说话,数据报
5.8. sendto()和recvfrom() ---和我说话,数据报 “这很不错啊”,你说,“但是你还没有讲无连接数据报套接字呢?” 没问题,现在我们开始这个内容。既然数据报套接字不是连接到远程主机的,那么在我们发送一个包之前需要什么信息呢? 不错,是目标地址! sendto()函数原型:int sendto(intsockfd, const void *msg, int len, unsigned int flags,const struct sockadd翻译 2013-12-19 20:00:16 · 3828 阅读 · 0 评论 -
5.7 send()和 recv() ---跟我说话,宝贝!
5.7. send() 和 recv() ---跟我说话,宝贝! 这两个函数用于流式套接字或者数据报套接字的通讯。 send()函数原型:int send(intsockfd, const void *msg, int len, int flags); sockfd 是你想发送数据的套接字描述符(或者是调用 socket() 或者是accept() 返回的。)msg 是指向你想发送的数据的指针。len是数据的长度。把 flags 设置为 0 就可以了。(详翻译 2013-12-02 22:39:16 · 7501 阅读 · 0 评论 -
5.5 listen() --- 如果有“人”,请叫我?
5.5. listen() ---如果有“人”,请叫我? 是换换内容得时候了。假如你不希望与远程的一个地址相连,或者说, 仅仅是将它踢开,那你就需要等待接入请求并且用各种方法处理它们。处理过程分两步:首先,监听--listen(),然后,你接受--accept() 函数原型:int listen(intsockfd, int backlog); sockfd 是调用socket() 返回的套接字文件描述符。backlog 是在进入队列中允许的连接数目。什么翻译 2013-04-22 19:58:02 · 2930 阅读 · 0 评论 -
5.4 connect() --- 嘿,是你吗?
5.4 connect() --- 嘿,是你吗? 现在我们假设你是个telnet 程序。你的用户命令你得到套接字的文件 描述符。你听从命令调用了socket()。下一步,你的用户告诉你通过端口 23(标准 telnet 端口)连接到"10.12.110.57"。你该怎么做呢? 幸运的是,你正在阅读 connect()--如何连接到远程主机这一章。你可不想让你的用户失望。 下面是他的原型:#include<sys/types.h>#include<sys/socket.h翻译 2013-04-16 11:45:50 · 7036 阅读 · 0 评论 -
5.2 socket --- 获得文件描述符
5.2 socket ---获得文件描述符 我不想长篇大论---我要谈的调用系统函数socket()。下面是他的原型:#include<sys/types.h>#include<sys/socket.h>int socket(intdomain, int type, int protocol); 但是这些参数干什么的呢?他们允许你使用哪种套接字(IPv4还是IPv6;TCP还是UDP)。 它曾经是人们将这些值进行硬编码,你也可以这么做。(d翻译 2013-03-06 02:33:40 · 5534 阅读 · 0 评论 -
5.1 getaddrinfo() --- 准备运行
5. 调用/捕获系统函数 这部分我们使用系统的函数来访问网络他们在Unix的头文件里,以及任何支持套接字APP的操作系统(BSD、Windows、Linux、Mac等等)。当你调用他们中间的函数时,内核会自动帮助完成所有工作。 大多数就卡在这些系统函数里。在这儿,因为你可能发现没有可用的man!好,为了帮助顺利适应它,我按照你的程序调用系统函数的顺序来讲解他们。 那么,你需要一些牛奶和饼干,再给你提供一些样例代码。其它的就是你的勇气、高昂的勇气!你会发现原来竟然翻译 2013-04-19 23:13:47 · 3237 阅读 · 0 评论 -
4. 从IPv4到IPv6
4.从IPv4到IPv6 但是我要知道从当前的代码变更为工作在IPv6上!告诉我! 好好~~ 说了这么多,我们就是讲他。 1) 首先,请使用getaddrinfo()来获得struct sockeaddr的信息,来替代我们的封装。这将使你的程序代码与IP版本无关,以便我们的后续步骤。 2) 在任何硬编码的地方,请使用其它函数代替。 3) 更改AF_INET 为AF_INET6 4) 更改PF_IN翻译 2012-04-09 04:27:41 · 3756 阅读 · 0 评论 -
3.4 IP地址,后继部分
3.4 IP地址,后继部分 首先,我们已经使用structsockaddr_in ina, 比如,“10.12.110.57”或者“2001:db8:63b3:1::3490”那我们怎么存储他呢?我们使用inet_pton()转换到结构中。(“pton”是presentation to network的简称。)下面分别是基于IPv4和IPv6的代码:struct sockaddr_insa; // IPv4structsockaddr_in6 sa6; //翻译 2014-12-02 01:46:49 · 4913 阅读 · 0 评论 -
3.1 IP地址,版本4和6
3. IP地址、结构体、数据排列 下面部分决定了,我们需要改变一下。 首先,我们不谈代码!首先我们谈关于IP地址和端口。当然我们要谈关于套接字API怎么存储和维护IP地址和其他数据。3.1 IP地址,版本4和6 在一个过去的好日子当BenKenobi准备呼叫Obi Wan Kenobi,要通过IPv4的路由系统。格式如:192.0.2.111. 事实上,现在大部分Internet仍然在使用IPv4。 此处省略若干…翻译 2015-08-01 23:29:57 · 6472 阅读 · 0 评论 -
2.2 网络理论
原文:https://beej.us/guide/bgnet/html/#lowlevel2.2 网络理论 既然我刚才提到了协议层,那么现在是讨论网络究竟如何工作和一些 关于 SOCK_DGRAM 包是如何建立的例子。当然,你也可以跳过这一段,如果你认为已经熟悉的话。 现在是学习数据封装(Data Encapsulation) 的时候了!它非常非常重 要。它重要性重要到你在网络课程学习中无论如何也得也得掌握它。主要的内容是:一个包,先是被第一个协议(在这里是TFTP )翻译 2011-12-11 01:49:25 · 4120 阅读 · 0 评论 -
2. 什么是socket
Windows 命名管道 - 服务器端以下代码为DLL库中的单元文件。服务器代码:UnmpSrv.pas(*-------------------------------------------------------------------------- Delphi菜鸟XiaoBin 2006.5.31于黑龙江草甸子 http://bl翻译 2011-11-28 00:13:23 · 7220 阅读 · 0 评论 -
Beej’s Guide Network to Programming Version 3.0.14
写在篇首:-------------------------------------------------------------------------------------- 此译文不是标准的一字一句的翻译! 而是作为一个程序员的角度去理解的产物! 有兴趣的朋友可以使用邮箱和我沟通!(非常欢迎你的交流) 我的邮箱: veic_2005#163.com(把#替换为@)--------------------翻译 2011-11-21 01:06:20 · 6082 阅读 · 0 评论 -
5.3. bind() —我在哪个端口上?
5.3. bind() ---在那个端口? 一旦你有一个套接字,你可能要将套接字和机器上的一定的端口关联起来。(如果你想用listen()来侦听一定端口的数据,这是必要一步---比如,开始玩多人网络游戏告诉你要连接到192.168.5.10的3490端口) 使用的端口号是由内核相匹配传入的数据包到某个进程的socket描述符。如果你只想用connect()(因为你是客户端,不是服务器端),那么这个步骤没有必要。但是无论如何,请继续读下去。 下面是他的原型:#include翻译 2011-12-27 23:58:54 · 2126 阅读 · 0 评论