`
memorymyann
  • 浏览: 271810 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
虽然UDP不保证传输的可靠性,但UDP无链接性相对于TCP仍然有其它方面的优势。比如之前的聊天程序,基于TCP实现的聊天程序在群聊方面就很麻烦,因为链接总是双方的通信,很难加入第3方(或许应该说更本就不能加入)。其次UDP ...
之前曾经提到过这个名词,套接口低潮限度。(以下都只针对TCP)   接收低潮限度(SO_RCVLOWAT):之前我们曾经使用过select函数,如果将套接口可读,也就是说套接口中有数据可以读出做为select的一个阻塞条件,则什么叫做有数据可读?其实就是指套接口中数据大小大于低潮限度。默认的低潮大小为1,也就是只要有数据到达就表示可读。   发送低潮限度(SO_SNDLOWAT):和上面一样,就是当你想对某个套接口执行write时候,如果空闲大小大于等于低潮限度就表示可写,也就是会从select函数返回。比如说下面的程序 #include "/programe/net/hea ...
每个套接口都会有很多选项,举个例子比如接受缓冲区的大小,如何获取这些选项和以及设置这些选项在某些时候则显得比较重要(虽然很多时候默认的就可以了)。   函数说明 #include "sys/socket.h" int getsockopt(int sockfd, int level, int optname, void * optval, socklen_t * optlen); int setsockopt(int sockfd, int level, int optname, const void * optval, socklen_t * optlen); ...
poll函数和select一样都是用于I/O复用,他们提供的功能也一样,只不过是poll想对于流设备,提供一些额外的功能。在SVR3时候只局限于使用流设备,但这个SVR4以后,poll可以用于各种设备。   #include "poll.h" int poll(struct polif ...
打开的套接口总是需要调用close来关闭,这样就能够回收资源。虽然大部分发行版本的linux,至少在我的fedora上面,不执行close,当进程死亡的时候打开的套接口仍然会被回收,但依赖于这点回收的话具有很大的不确定因素,因为 ...
    之前代码仍然存在一些比较重要的问题,当我们客户端进程阻塞于从标准输入获取数据的时候n = read(connfd, buf, 100)。 如果出现了意外,比如说我们手动kill掉服务器对客户端的服务进程,此时服务器就会向客户端接口发送fin ...
之前程序存在着一个不确定性的因素。之前服务器代码中。子进程在死亡后,会向父进程发送SIGCHLD信号。这个信号会被父进程捕获,然后父进程调用wait函数对死亡子进程处理防止其变成僵尸进程(僵尸进程会一直占用内存资源在它被回收之前。如果父进程在死亡之前没有回收僵尸进程,那么在unix下,僵尸进程会被init进程托管并回收。无主进程都会被托管给init)。   执行之前的代码,然后执行ps -aux可以看到不会有服务器派生的子进程成为僵死进程,但如果将客户端代码改成 [root@liumengli net]# cat echo_client2.c #include "/progra ...
该代码大致过程,客户端连接服务器,服务器接收链接后,将创建子进程。客户端从终端输入字符,字符会被送到服务器的子进程,子进程得到字符后,再将字符回馈给客户端,客户端将其显示出来。代码比较长因为加入了信号对死亡子进程的处理。 [root@liumengli net]# cat echo_server.c #include "/programe/net/head.h" #include "stdio.h" #include "stdlib.h" #include "string.h" #include &quo ...
getsockname与getpeername是返回套接口关联的本地协议地址和远程协议地址。 int getsockname(int sockfd, struct sockaddr * localaddr, socken_t * addrlen); int getpeername(int sockfd, struct sockaddr * peeraddr, socken_t * addrlen); 返回0表示成功,返回1表示出错   参数sockfd表示你要获取的套接口的描述字。 localaddr返回本地协议地址描述结构, peeraddr返回远程协议地址描述结构,addrlen ...
在服务器端: 1.首先是调用socket函数创建一个socket,此时返回该socket描述字(前面介绍过)。此时的服务器socket处于closed状态。   2.此时socket被建立,但是socket内部除了协议外,IP地址和端口号均由系统指定。因此接下来将会自己声明一个网络套接字(该套接字结构取决于你要使用什么协议,常用的IPV4协议,结构为struct sockaddr_in),该结构在使用之前一般先使用bzero函数清0(你也可以使用memset等其它函数,清0即可)。然后给该结构指定协议族,IP地址(一个机器有几个IP地址,比如127.0.0.1或者内网地址,可能还有外网地址 ...
对于编程者来说,我们所见到的网络通信实际上是2个socket之间的通信。所以双方第一步会调用socket创建socket。此时系统内核会创建一个socket描述结构并返回该描述结构的描述字。对于服务器来说,系统自己创造的socket并不适合, ...
文章接前面的例子程序。首先介绍套接口地址结构: struct sockaddr_in,定义在netinet/in.h中,一般是在/usr/include 下   struct in_addr {    in_addr_t s_addr;/*32字节的ipv4地址*/ }   struct sockaddr_in {    uint8_t sin_len;    sa_family_y sin_family; ...
[root@liumengli net]# cat client1.c #include "/programe/net/head.h" #include "stdio.h" #include "stdlib.h" int main(int argc, char ** argv) {         int sockfd, n;         int my;         char buf[100];         struct sockaddr_in servaddr;         if((sockfd = ...
Node {Node * lchild; Node * rchild; Data_Type data; };   Temp {Node * node; int count; };   void fun(Node * root) {   Temp p = malloc;   p->node = root;   p->count = 0;     while(p && s is not empty) {     if(p->node) {       p->count++;       push(p, s);       p ...
问题:计算机如何来计算除法的?   第一步:分析除法   现在做一个简单的除法 56/7,大部分人会很快一闪"七八五十六",很快能算出结果是8.这是九九乘法表作怪,如果我么没有背诵过乘法表,我们如何来计算这个简单 ...
Global site tag (gtag.js) - Google Analytics