TCP 组播 广播
2015-07-02 19:24
507 查看
在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函数来设置函数的属性
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;
}
相关文章推荐
- 组播的相关概念
- 组播、IGMP、IGMP Snooping
- 组播是如何在MPLS ***网络中实现的?
- IP城域网域内组播功能测试
- 私有IP地址、本机地址、广播地址以及组播地址
- 单播,组播,广播的区别
- 以太网组播地址与数据传输序位
- 什么是“单播”“组播”和“多播”
- 组播、IGMP、IGMP Snooping
- JNCIP--组播
- 单播、广播、组播
- IP 视频会议中的组播实现
- PIM (*,G)和(S,G)通用规则
- socket 组播接收和发送实例
- 组播MAC地址
- 组播 可控组播 IGMP Proxy 的概述
- ffmpeg的本地视频组播
- 广播与组播
- 如何创建组播应用程序
- linux下使用socket实现组播