UDP套接字的SOCK_DGRAM名字来自于单词“datagram”(数据报)。
目前,在domain参数为PF_INET的SOCK_STREAN的套接口中,protocol的参数为0意味着内核选择IPPROTO_TCP,也就是套接口使用TCP/IP协议。 使用PF_INET和SOCK_DGRAM 这个组合告诉内核选择UDP协议。也就是选择IPPROTO_UDP。 下表是一个总结: 当然Linux支持许多的协议,此处不多说。 有关协议族的一些宏定义在sys/socket.h头...
对于UDP,so_type等于SOCK_DGRAM,而对于TCP,so_type等于SOCK_STREAM so_options so_options是一组改变Socket行为的标志。 | so_options | 描述 | | SO_ACCEPTCONN | Socket接收进入的连接(仅用于内核) | | SO_BROADCAST | Socket能够发送广播报文 | | SO_DEBUG | Socket记录排错信息 | | SO_DONTROUTE | ...
s = socket(PF_INET, SOCK_STREAM, 0); 要创建 IPv4/UDP 套接字,应用程序会调用 s = socket(PF_INET, SOCK_DGRAM, 0); 应用程序可以通过简单地使用创建 IPv6/TCP 和 IPv6/UDP 套接字,第一个参数中的常量 PF_INET6 而不是 PF_INET。要创建 IPv6/TCP 套接字,应用程序会调用 s = socket(PF...
socketID = socket( PF_INET, SOCK_DGRAM, 0 ); if ( 0 > socketID ) { perror("socket error"); return -1; } printf("client socket ok\r\n"); //准备要发送的消息 fgets(buf, SIZE - 1, stdin); //设置对方的地址 addrLength = sizeof(addr); ...
1) SOCK_STREAM 表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。常见的 http 协议就使用 SOCK_STREAM 传输数据,因为要确保数据的正确性,否则网页不能正常解析。 2) SOCK_DGRAM 表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,如果数据...
int socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); 满足IPv4协议,且是面向消息传输的只有:IPPROTO_UDP int socket(PF_INET,SOCK_STREAM,IPPROTO_UDP); 最后附上Windows下初始化Winsock的模板写法: SOCKET soc=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
sendto(sock, recvbuf, n, 0, (struct sockaddr *)&peeraddr, peerlen); } } close(sock); } int main(void) { int sock; if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0) ERR_EXIT("socket error"); struct sockaddr_in servaddr; ...
int inet_pton(int af, const char *src, void *dst); af:地址族: AF_INET AF_INET6 src:需要转换的点分十进制的IP字符串 dst:转换后的结果保存在这个里面 // 将网络字节序的整数,转换成点分十进制的IP地址字符串 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);...
socket函数原型为:intsocket(intdomain,inttype,intprotocol);domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值"0"。Socket()调用返回一个整型socket描述符,...