基于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
- 基于C的UDP,TCP网络编程
- 基于TCP,UDP的网络编程总结
- java 网络编程 基于TCP ,UDP的网络传输
- 基于UDP、TCP协议的C#网络编程之一
- 【转载】 基于UDP、TCP协议的C#网络编程
- 基于UDP、TCP协议的C#网络编程
- 基于TCP与UDP的windows网络编程
- 【C语言】【unix c】基于UDP的网络编程
- 基于UDP的网络编程
- 基于UDP的网络编程
- C/C++实现基于UDP的网络编程
- C编程之基于UDP的网络通信
- 基于UDP的服务器端/客户端---------网络编程(Linux----C)
- 基于TCP/UDP的网络聊天程序
- winsock网络编程——基于TCP的程序设计和基于UDP的程序设计
- TCP网络编程&&UDP
- 网络编程 UDP TCP
- 网络编程(TCP/UDP)
- 利用<% %>传值
- 已存在的Android studio(Intellij )Plugin project (工程源码)如何导入intellij ?
- React组件的生命周期
- redis密码设置、访问权限控制等安全设置
- LeetCode || 001 Two Sum
- 基于C的UDP,TCP网络编程
- Redis介绍以及安装(Linux)
- 40个Java集合面试问题和答案
- 关于编写TypeScript的.d.ts文件
- OverTheWire之Vortex
- 几款Web服务器性能压力测试工具
- Redis安全
- usaco训练总结3
- BtTracker原理