基于C的UDP,TCP网络编程

来源:互联网 发布:java rmi反序列化 exp 编辑:程序博客网 时间:2024/04/30 21:22
 1 #include<iostream> 2 #include<stdio.h> 3 #include<sys/socket.h> 4 #include<unistd.h> 5 #include<sys/types.h> 6 #include<netdb.h> 7 #include<netinet/in.h> 8 #include<arpa/inet.h> 9 #include<string.h>10 using namespace std;11 int main()12 {13     setvbuf(stdout,NULL,_IONBF,0);14     fflush(stdout);15     int sock=-1;16     if((sock=socket(AF_INET,SOCK_DGRAM,0))==-1)17     {18         cout<<"sock error"<<endl;19         return -1;20     }21     const int opt=-1;22     int nb=0;23nb=setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char*)&opt,sizeof(opt));//设置套接字类24     if(nb==-1)25     {26         cout<<"set socket error...\n"<<endl;27         return -1;28     }29     struct sockaddr_in addrto;30     bzero(&addrto,sizeof(struct sockaddr_in));31     addrto.sin_family=AF_INET;32     addrto.sin_addr.s_addr=htonl(INADDR_BROADCAST);//套接字地址为广播地址33     addrto.sin_port=htons(6000);//套接字广播端口号为600034     int nlen=sizeof(addrto);35     while(1)36     {37         sleep(1);38         char msg[]={"the message broadcast"};39         int ret=sendto(sock,msg,strlen(msg),0,(sockaddr*)&addrto,nlen);//向广播地址发布消息40         if(ret<0)41         {42             cout<<"send error...\n"<<endl;43             return -1;44         }45         else 46         {47             printf("ok\n");48         }49     }50     return 0;51 } UDP广播客户端代码: 1 #include<iostream>  2 #include<stdio.h> 3 #include<sys/socket.h> 4 #include<unistd.h> 5 #include<sys/types.h> 6 #include<netdb.h> 7 #include<netinet/in.h> 8 #include<arpa/inet.h> 9 #include<string.h> 10 11 12 using namespace std;13 int main()14 {15         setvbuf(stdout,NULL,_IONBF,0);16         fflush(stdout);17         struct sockaddr_in addrto;18         bzero(&addrto,sizeof(struct sockaddr_in));19         addrto.sin_family=AF_INET;20         addrto.sin_addr.s_addr=htonl(INADDR_ANY);21         addrto.sin_port=htons(6000);22         socklen_t len=sizeof(addrto);23         int sock=-1;24         if((sock=socket(AF_INET,SOCK_DGRAM,0))==-1)25         {26                 cout<<"socket error..."<<endl;27                 return -1;28         }29         const int opt=-1;30         int nb=0;31         nb=setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char*)&opt,sizeof(opt));32         if(nb==-1)33         {34                 cout<<"set socket errror..."<<endl;35                 return -1;36         }37         if(bind(sock,(struct sockaddr*)&(addrto),len)==-1)38         {39                 cout<<"bind error..."<<endl;40                 return -1;41         }42         char msg[100]={0};43         while(1)44         {45                 int ret=recvfrom(sock,msg,100,0,(struct sockaddr*)&addrto,&len);46                 if(ret<=0)47                 {48                         cout<<"read error..."<<endl;49                 }50                 else51                 {52                         printf("%s\t",msg);53                 }54                 sleep(1);55         }56         return 0;57 }tcp_server.c#include <stdio.h>  #include <sys/types.h>  #include <sys/socket.h>  #include <netinet/in.h>  #include <arpa/inet.h>    int main(int argc, char *argv[])  {      int server_sockfd;//服务器端套接字      int client_sockfd;//客户端套接字      int len;      struct sockaddr_in my_addr;   //服务器网络地址结构体      struct sockaddr_in remote_addr; //客户端网络地址结构体      int sin_size;      char buf[BUFSIZ];  //数据传送的缓冲区      memset(&my_addr,0,sizeof(my_addr)); //数据初始化--清零      my_addr.sin_family=AF_INET; //设置为IP通信      my_addr.sin_addr.s_addr=INADDR_ANY;//服务器IP地址--允许连接到所有本地地址上      my_addr.sin_port=htons(8000); //服务器端口号            /*创建服务器端套接字--IPv4协议,面向连接通信,TCP协议*/      if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)      {            perror("socket");          return 1;      }             /*将套接字绑定到服务器的网络地址上*/      if (bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)      {          perror("bind");          return 1;      }            /*监听连接请求--监听队列长度为5*/      listen(server_sockfd,5);            sin_size=sizeof(struct sockaddr_in);            /*等待客户端连接请求到达*/      if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&remote_addr,&sin_size))<0)      {          perror("accept");          return 1;      }      printf("accept client %s/n",inet_ntoa(remote_addr.sin_addr));      len=send(client_sockfd,"Welcome to my server/n",21,0);//发送欢迎信息            /*接收客户端的数据并将其发送给客户端--recv返回接收到的字节数,send返回发送的字节数*/      while((len=recv(client_sockfd,buf,BUFSIZ,0))>0))      {          buf[len]='/0';          printf("%s/n",buf);          if(send(client_sockfd,buf,len,0)<0)          {              perror("write");              return 1;          }      }      close(client_sockfd);      close(server_sockfd);          return 0;  }  TCP协议:客户端:tcp_client.c[c-sharp] view plaincopyprint?#include <stdio.h>  #include <sys/types.h>  #include <sys/socket.h>  #include <netinet/in.h>  #include <arpa/inet.h>    int main(int argc, char *argv[])  {      int client_sockfd;      int len;      struct sockaddr_in remote_addr; //服务器端网络地址结构体      char buf[BUFSIZ];  //数据传送的缓冲区      memset(&remote_addr,0,sizeof(remote_addr)); //数据初始化--清零      remote_addr.sin_family=AF_INET; //设置为IP通信      remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//服务器IP地址      remote_addr.sin_port=htons(8000); //服务器端口号            /*创建客户端套接字--IPv4协议,面向连接通信,TCP协议*/      if((client_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)      {          perror("socket");          return 1;      }            /*将套接字绑定到服务器的网络地址上*/      if(connect(client_sockfd,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr))<0)      {          perror("connect");          return 1;      }      printf("connected to server/n");      len=recv(client_sockfd,buf,BUFSIZ,0);//接收服务器端信息           buf[len]='/0';      printf("%s",buf); //打印服务器端信息      /*循环的发送接收信息并打印接收信息--recv返回接收到的字节数,send返回发送的字节数*/      while(1)      {          printf("Enter string to send:");          scanf("%s",buf);          if(!strcmp(buf,"quit")              break;          len=send(client_sockfd,buf,strlen(buf),0);          len=recv(client_sockfd,buf,BUFSIZ,0);          buf[len]='/0';          printf("received:%s/n",buf);      }      close(client_sockfd);//关闭套接字           return 0;  }  

0 0