TCP 组播 广播
来源:互联网 发布:诱导交友app源码 编辑:程序博客网 时间:2024/05/17 18:18
在TCP/IP中传输信息主要方式有两种,UDP和TCP,UDP是不可靠通信,在传输信息之前并没有和服务器建立连接,客户端采用sendto函数(可通过man命令查看sendto函数的原型),服务器端主要采用recvfrom函数接受来自客户端的信息。
TCP采用可靠连接,主要是连接采用三次握手,断开时采用四次挥手,具体过程可以参考wireshark抓包进行查看其具体过程,在具体建立连接的过程主要是
1、建立socket套接字sockfd
2、listen监听
3、accept接收来自客户端的连接,建立新的套接字connfd
4、recv函数接收来自客户端的信息,客户端采用send函数进行传送数据。
接下来po出组播的代码
最主要的是这部分代码:通过设置组播的IP和本机的IP来接收发送到组播IP的信息,
同时通过setsockopt函数来设置函数的属性
struct ip_mreqn addr; addr.imr_address.s_addr = inet_addr("192.168.4.69");//需要同时绑定本机IP和组播的IP addr.imr_multiaddr.s_addr = inet_addr("224.0.1.1"); addr.imr_ifindex = 0; setsockopt(udp_socket,IPPROTO_IP,IP_ADD_MEMBERSHIP,&addr,sizeof(addr));//设置socket的属性
int main(int argc, const char *argv[]){ int udp_socket; char buf[64]; struct sockaddr_in myaddr,peeraddr; int peer_len; if((udp_socket = socket(PF_INET,SOCK_DGRAM,0)) == -1) { perror("socket"); exit(1); }#if 1 memset(&myaddr,0,sizeof(myaddr));// bzero(&myaddr,sizeof(myaddr)); myaddr.sin_family = PF_INET; myaddr.sin_port = htons(50001); myaddr.sin_addr.s_addr = inet_addr("224.0.1.1"); if(bind(udp_socket,(struct sockaddr *)&myaddr,sizeof(myaddr)) == -1) { perror("bind"); exit(1); }#endif #if 1 memset(&peeraddr,0,sizeof(peeraddr)); peer_len = sizeof(peeraddr); struct ip_mreqn addr; addr.imr_address.s_addr = inet_addr("192.168.4.69");//需要同时绑定本机IP和组播的IP addr.imr_multiaddr.s_addr = inet_addr("224.0.1.1"); addr.imr_ifindex = 0; setsockopt(udp_socket,IPPROTO_IP,IP_ADD_MEMBERSHIP,&addr,sizeof(addr));//设置socket的属性 while(1) { if(recvfrom(udp_socket,buf,sizeof(buf),0,(struct sockaddr *)&peeraddr, &peer_len) == -1) { perror("recvfrom"); exit(1); } printf("from %s : %d : %s",inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port),buf); }#endif return 0;}
0 0
- TCP 组播 广播
- 【Java TCP/IP Socket】 — 单播、广播、组播
- TCP/IP传送方式有三种:单播,广播,组播
- TCP/IP传送方式有三种:单播,广播,组播
- TCP/IP多播、广播、单播
- tcp/ip协议学习笔记(6)广播与组播
- 单播,广播,组播
- 单播、广播、组播
- 单播,广播,组播
- 单播/组播/广播
- 广播 组播 单播
- 组播 广播 单播
- 单播、广播、组播
- 单播,广播,组播
- 单播、广播、组播
- 单播,广播,组播
- 广播,单播,组播
- 单播,组播,广播
- strcpy/strncpy/strcat/strcmp/strlen函数的c语言实现
- nginx rewrite
- Maven Tomcat7自动部署
- 解读Cardinality Estimation算法(第四部分:HyperLogLog Counting及Adaptive Counting)
- Spyder常用环境working directory设置
- TCP 组播 广播
- Android 启动简述
- 计算几何基本知识整理
- NYOJ 19 擅长排列的小明(dsf STL——next_permutation函数)
- 孤儿进程和僵尸进程
- 从cgroup_init_early函数学习cgroup——框架
- 加班~~~第二天之自定义UIPageControl控件
- POJ 3041(最小点覆盖)
- 二十岁出头的时候上,你一无所有,你拥有一切