af

socket 进程通讯理解

徘徊边缘 提交于 2019-11-26 23:53:11
【转】 https://blog.csdn.net/andrewgithub/article/details/81613120 正如可以给fopen的传入不同参数值,以打开不同的文件。创建socket的时候,也可以指定不同的参数创建不同的socket描述符,socket函数的三个参数分别为: domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET(IPV4)、AF_INET6(IPV6)、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。 type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等 protocol:就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。protocol一般取为0,表示给定的域和套接字类型类型选择默认协议; 注意

网络编程(8)—— IP地址和域名之间的转换

ⅰ亾dé卋堺 提交于 2019-11-26 19:25:16
一、引言 域名,简单来理解就是我们平常说的网址。比如登录某度买假药时,会在IE浏览器的地址栏输入www.baidu.com,这里我们输入的就是百度的域名。而实际上我们在互联网中要找到某个网站,是需要这个网站的IP地址的,因为在网络中IP地址就是一台主机的联系地址,而通过域名寻找主机时,就需要先将域名转换成IP地址,这就是我们通常说的DNS服务器的作用。 二、通过域名获取IP地址 网络编程中,我们通过gethostbyname函数可以通过域名获取主机信息。所谓主机信息就是网络那头web服务器的信息,其中就包含该服务器的IP地址。gethostbyname的函数原型如下: #include <netdb.h> struct hostent *gethostbyname(const char *name); 它接收的唯一参数就是我们在浏览器中输入的域名,在前面的例子中也就是某度的url:www.baidu.com。而他的返回值是一个hostent类型的指针,该结构体的定义如下: struct hostent { char* h_name; char** h_aliases; int h_addrtype; int h_length; char** h_addr_list; } h_name,存有官方域名。官方域名代表某一主页,但是一些公司的域名可能并未在官方域名注册。 h_aliases

广播和组播

守給你的承諾、 提交于 2019-11-26 00:36:10
一。广播 服务端向192.168.1.1~192.168.1.254的所有IP的9000端口发送数据 服务端 1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <sys/socket.h> 5 #include <string.h> 6 #include <arpa/inet.h> 7 #include <net/if.h> 8 9 #define SERVER_PORT 8000 //服务器端口 10 #define MAXLINE 1500 11 12 #define BROADCAST_IP "192.168.1.255" //广播地址 13 #define CLIENT_PORT 9000 //广播的端口 14 15 int main(void) 16 { 17 int sockfd; 18 struct sockaddr_in serveraddr, clientaddr; 19 char buf[MAXLINE]; 20 21 /* 构造用于UDP通信的套接字 */ 22 sockfd = socket(AF_INET, SOCK_DGRAM, 0); 23 24 bzero(&serveraddr, sizeof(serveraddr)); 25 serveraddr

Linux测试TCP通信

最后都变了- 提交于 2019-11-25 22:25:38
传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。 百度百科 在TCP/IP中,TCP和UDP是最主要的传输层协议,也是应用希望进行网络通信时直接接触的协议。现在就来尝试一下在Linux上实现TCP-Server和TCP-Client的双向通信。 系统环境:Ubuntu 18.04/vim/g++/make 本文假设读者有一定C基础,基本了解TCP协议。 要先实现在Linux的C程序运行,首先要在Linux系统上安装C编译环境,这里使用vim编写,g++编译,makefile构建。 TCP/IP协议是现代网络通信的核心协议,在网络通信时,由于各种各样的原因,如交换设备掉电、网络堵塞、主机宕机等,都可能造成数据传输的失败。这时候保证数据能够完整的到达目的地就尤为重要。这时候就需要TCP协议的握手机制来实现可靠的通信。 所谓握手机制就是在正式开始数据传输之前进行一些传输参数的协商,建立连接后再传送数据就可以对每一组数据进行确认,以保证可靠传输。 TCP协议提供了端口号的概念,每台主机共有65536个端口分别编号0~65535,。每个端口对应一个进程,如最常见的80代表HTTP连接,21代表FTP服务,22代表SSH服务,3389 代表Windows远程登录等等