linux的socket
来源:互联网 发布:linux 虚拟终端 编辑:程序博客网 时间:2024/06/07 07:47
socket是做什么的:
虽然 socket 接口理论上还允许访问除 IP 以外的协议系列,然而在实际上,socket应用程序中使用的每个网络层都将使用 IP. 在传输层,socket 支持两个特殊协议:TCP (transmission control protocol,传输控制协议) 和 UDP (user datagram protocol,用户数据报协议)。
Socket不能用来访问较低(或较高)的网络层。例如,socket 应用程序不知道它是运行在以太网、令牌环网还是拨号连接上。Socket 的伪层(pseudo-layer)也不知道高层协议(比如 NFS、HTTP、FTP等)的任何情况(除非您自己编写一个 socket 应用程序来实现那些高层协议)。
在很多情况下,socket接口并不是用于网络编程 API 的最佳选择。特别地,由于存在很多很优秀的库可以直接使用高层协议,您不必关心 socket 的细节;那些库会为您处理 socket 的细节。例如,虽然编写您自己的 SSH 客户机并没有什么错,但是对于仅只是为了让应用程序安全地传输数据来说,就没有必要做得这样复杂。低级层比 socket 所访问的层更适合归入设备驱动程序编程领域。
TCP UDP
TCP 是流协议,而UDP是数据报协议。换句话说,TCP 在客户机和服务器之间建立持续的开放连接,在该连接的生命期内,字节可以通过该连接写出(并且保证顺序正确)。然而,通过 TCP 写出的字节没有内置的结构,所以需要高层协议在被传输的字节流内部分隔数据记录和字段。
另一方面,UDP 不需要在客户机和服务器之间建立连接,它只是在地址之间传输报文。UDP 的一个很好特性在于它的包是自分隔的(self-delimiting),也就是一个数据报都准确地指出它的开始和结束位置。然而,UDP 的一个可能的缺点在于,它不保证包将会按顺序到达,甚至根本就不保证。当然,建立在 UDP 之上的高层协议可能会提供握手和确认功能。
主机名解析:#include <stdio.h> /* stderr, stdout */#include <netdb.h> /* hostent struct, gethostbyname() */#include <arpa/inet.h> /* inet_ntoa() to format IP address */#include <netinet/in.h> /* in_addr structure */int main(int argc, char **argv) {struct hostent *host; /* host information */ struct in_addr h_addr; /* Internet address */ if (argc != 2) { fprintf(stderr, "USAGE: nslookup <inet_address>\n"); exit(1); } if ((host = gethostbyname(argv[1])) == NULL){ fprintf(stderr, "(mini) nslookup failed on '%s'\n", argv[1]); exit(1); } h_addr.s_addr = *((unsigned long *) host->h_addr_list[0]); fprintf(stdout, "%s\n", inet_ntoa(h_addr)); exit(0);}
addia@addia-Lenovo-B470:~$ ./test 百度119.75.218.77
- linux socket的bug??
- Linux的socket编程
- Linux的socket编程
- 基础linux的socket
- linux的socket
- linux 的socket编程
- linux 的 socket例子
- Linux的Socket编程
- Linux的socket编程
- linux 的socket
- Socket&Linux方面的SOCKET资料
- Socket&Linux方面的SOCKET资料
- Linux Socket编程一:socket的认识
- Window Socket和Linux socket的区别
- Linux下的Socket编程
- linux下的socket编程
- Linux下的Socket编程
- Linux中Socket的select
- 互联网思维
- 模板基链的实现,实现c#的接口,单继承模式
- 如何进行产品定位(上)
- 如何学习.Net的步骤
- Windows应用程序高级控件之TreeView
- linux的socket
- mybatis简单应用(基于配置文件)
- 设计模式的六大原则
- 资深工程师技术笔记:谈谈高速数字系统的滤波电容
- TCP/IP详解2 第2章 mbuf:存储器缓存 ,读书记录
- 如何用web api在网页中嵌入二维码?
- 增强for循环用法
- jetty solr 标准安装
- [转载]VS的项目的comment arguments和working directory