`
luliangok
  • 浏览: 816388 次
文章分类
社区版块
存档分类
最新评论
文章列表
5.11. gethostname() ---我是谁? 甚至比getpeername() 还简单的函数是 gethostname()。它返回你程序所运行的机器的主机名字。然后你可以使用 gethostbyname() 以获得你的机器的 IP 地址。   下面是定义:   #include <unistd.h> intgethostname(char *hostname, size_t size); 参数很简单:hostname是一个字符数组指针,它将在函数返回时保存 主机名。size是hostname 数组的字节长度。 函数调用成功时返回 0,失败时返回 -1, ...
5.10. getpeername() ---你是谁? 这个函数太简单了。 它太简单了,以至我都不想单列一章。但是我还是这样做了。函数 getpeername() 告诉你在连接的流式套接字上谁在另外一边。函 数是这样的: #include<sys/socket.h> intgetpeername(int sockfd, struct sockaddr *addr, int *addrlen); sockfd 是连接的流式套接字的描述符。addr是一个指向结构 struct sockaddr (或者是 structsockaddr_in) 的指针,它保存着连接的另一边 ...
5.9. close()和shutdown() ---别让我再见到你的脸! 你已经整天都在发送(send()) 和接收 (recv()) 数据了,现在你准备关闭你的套接字描述符了。这很简单,你可以使用一般的 Unix 文件描述符的 close() 函数: int close(sockfd); 它将防止套接字上更多的数据的读写。任何在另一端读写套接字的企 图都将返回错误信息。 如果你想在如何关闭套接字上有多一点的控制,你可以使用函数 shutdown()。它允许你将一定方向上的通讯或者双向的通讯(就象close()一样)关闭,你可以使用: int shutdown(intsoc ...
如果你是学生或者正打算去献血,那么你一定要看完,因为大部分学生太幼稚了。 一位有良心的老医生为你揭开献血惊人内幕:我作为一个有良知的人,不得不为我的朋友们告知这一事实,耐心看完,你会心寒。最近关于无偿献血无损于身体的谬论铺天盖地,作为一个普通的医务工作者,我有义务做一个合理的解释。一、首先什么是血液?血液所含的三种血细胞分别是;红细胞,白细胞,血小板。血液的每一种组成都它特殊的功能。......以下省略,我挑主要的说。二、献血会造成血液功能的弱化甚至丧失。简单的讲,红细胞的减少会使身体各部分器官得不到足够的氧气,细胞的各项生命功能无法正常发挥,献血后产生头晕现象就是因为脑部没有得到足够的氧气。白 ...
5.8. sendto()和recvfrom() ---和我说话,数据报 “这很不错啊”,你说,“但是你还没有讲无连接数据报套接字呢?” 没问题,现在我们开始这个内容。 既然数据报套接字不是连接到远程主机的,那么在我们发送一个包之前需要什么信息呢? 不错,是目标地址! sendto()函数原型: int sendto(intsockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, socklen_ttolen); 你已经看到了,除了另外的两个信息外,其余的和函数 se ...
5.7. send() 和 recv() ---跟我说话,宝贝! 这两个函数用于流式套接字或者数据报套接字的通讯。 send()函数原型: int send(intsockfd, const void *msg, int len, int flags); sockfd 是你想发送数据的套接字描述符(或者是调用 socket() 或者是accept() 返回的。)msg 是指向你想发送的数据的指针。len是数据的长度。把 flags 设置为 0 就可以了。(详细的资料请看 send() 的 man page)。 下面是一些示例代码: char *msg = “Beejwa ...
5.6. accept() ---“谢谢你来调用端口3490” 准备好了,系统调用accept() 会有点古怪的地方的!你可以想象发生这样的事情:有人从很远的地方通过一个你在侦听 (listen()) 的端口连接(connect()) 到你的机器。它的连接将加入到等待接受 (accept()) 的队列中。你调用accept() 告诉它你有空闲的连接。它将返回一个新的套接字文件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口,新的在准备发送 (send()) 和接收 (recv()) 数据。这就是这个过程! 函数原型: #include<sys/types.h& ...
5.5. listen() ---如果有“人”,请叫我? 是换换内容得时候了。假如你不希望与远程的一个地址相连,或者说, 仅仅是将它踢开,那你就需要等待接入请求并且用各种方法处理它们。处理过程分两步:首先,监听--listen(),然后,你接受--accept() 函数原型: int listen(intsockfd, int backlog); sockfd 是调用socket() 返回的套接字文件描述符。backlog 是在进入队列中允许的连接数目。什么意思呢? 进入的连接是在队列中一直等待直到你接受 (accept() 请看下面的文章)连接。它们的数目限制于队列的允许。 ...
5.4. connect() ---嘿,是你吗? 现在我们假设你是个telnet 程序。你的用户命令你得到套接字的文件 描述符。你听从命令调用了socket()。下一步,你的用户告诉你通过端口 23(标准 telnet 端口)连接到"10.12.110.57"。你该怎么做呢? 幸运的是,你正在阅读 connect()--如何连接到远程主机这一章。你可不想让你的用户失望。 下面是他的原型: #include<sys/types.h> #include<sys/socket.h> connect(intsockfd, struct ...
翻译了那么多章的《Beej’s Guide Network to Programming》我们有必要自己动手写一个简单的客户端和服务器端的程序! Client Side: getaddrinfo() -> socket() -> connect() -> recv() code:#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #in ...
翻译了那么多章的《Beej’s Guide Network to Programming》我们有必要自己动手写一个简单的客户端和服务器端的程序! Client Side: getaddrinfo() -> socket() -> connect() -> recv() code:#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #in ...
5.3. bind() ---在那个端口? 一旦你有一个套接字,你可能要将套接字和机器上的一定的端口关联起来。(如果你想用listen()来侦听一定端口的数据,这是必要一步---比如,开始玩多人网络游戏告诉你要连接到192.168.5.10的3490端口) 使用的端口号是由内核相匹配传入的数据包到某个进程的socket描述符。如果你只想用connect()(因为你是客户端,不是服务器端),那么这个步骤没有必要。但是无论如何,请继续读下去。 下面是他的原型: #include<sys/types.h> #include<sys/socket.h> i ...
OCMock 测试类方法 罗朝辉(http://blog.csdn.net/kesalin) CC许可,转载请注明出处 使用 OCMock 进行 unit test 时,我们无法 stub 或 expect 类方法,那么又该怎样测试类方法呢?下面是一个解决办法:在测试类中的非类方法 wrap 一下类方法,然后测试 wrap 方法。 比如:Utilities 有个类方法:+ (NSString *) stringDate:(NSDate *)date withForamt:(NSString *)dateFormat; 比如: 我们在 UtilitiesTests 测试类中新建一个 ...
在Dock上添加最近使用的应用程序 作者:李笑来 来源:http://www.lixiaolai.com/archives/10939.html 有一个特别有用的Stack,“最近打开过的项目”,建立方法如下: 1. 打开Terminal,输入以下命令 defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = { "list-type" = 1; }; "tile-type" = "recents-tile&quo ...
Error: 1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE) Message: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. Solution: SETSQL_SAFE_UPDATES= 0; update T set col = 'xxx' where condition ……;
Global site tag (gtag.js) - Google Analytics