linux下C语言UDP通信
2015-09-27 14:24
483 查看
UDP:
无连接不可靠, 但是在稳定的网络中效率高
socket(
AF_INET, SOCK_DGRAM ,0) ;
struct sockaddr_in;
bind( ); // 为了确定目标
sendto (int socket, const void *message, size_t length,
int flags, const struct sockaddr *dest_addr, //发送message给对应地址
socklen_t dest_len);
ssize_t recvfrom(int socket, void *restrict buffer, size_t length,
int flags, struct sockaddr *restrict address, // 保存地址
socklen_t *restrict address_len);
实例:
server端
使用:
./server启用服务端
./client启用客户端,然后输入内容,服务端会收到。
ip和端口都在代码里定义了。
无连接不可靠, 但是在稳定的网络中效率高
socket(
AF_INET, SOCK_DGRAM ,0) ;
struct sockaddr_in;
bind( ); // 为了确定目标
sendto (int socket, const void *message, size_t length,
int flags, const struct sockaddr *dest_addr, //发送message给对应地址
socklen_t dest_len);
ssize_t recvfrom(int socket, void *restrict buffer, size_t length,
int flags, struct sockaddr *restrict address, // 保存地址
socklen_t *restrict address_len);
实例:
server端
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netdb.h> int port=8888; int main() { int sockfd; int len; int ret; char buf[256]; struct sockaddr_in adr_inet;//server struct sockaddr_in adr_clnt;//client /* 建立socket */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd==-1) { perror("create socket error:"); exit(1); } /* 建立IP地址 */ adr_inet.sin_family=AF_INET; adr_inet.sin_port=htons(port); adr_inet.sin_addr.s_addr =htonl(INADDR_ANY); //inet_pton(AF_INET, "192.168.1.181", &srvaddr.sin_addr); bzero(&(adr_inet.sin_zero),8); len=sizeof(struct sockaddr_in); printf("server : waiting for client...\n"); /* 绑定socket */ ret=bind(sockfd, (struct sockaddr *)&adr_inet, sizeof(adr_inet)); if(ret==-1) { perror("bind error"); exit(1); } while(1) { /* 接受传来的信息 */ ret=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_clnt,&len); printf("new connection: %s:%hu\n",inet_ntoa(adr_clnt.sin_addr), ntohs(adr_clnt.sin_port)); if(ret<0) { perror("recvfrom error:"); exit(1); } buf[ret]='\0'; printf("server receive:%s",buf); /* 收到stop字符串,终止连接*/ if(strncmp(buf,"stop",4)==0) { printf("recevice stop ,ending....\n"); break; } } close(sockfd); exit(0); }client端
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<netdb.h> #include<sys/socket.h> int port=8888; int main() { int sockfd; int i=0; int ret; char buf[80],str1[80]; struct sockaddr_in adr_srvr; //the address of server //ILE *fp; /*以只读的方式打开liu文件*/ /*=fopen("test","r"); if(fp==NULL) { perror("fopen error:"); exit(1); }*/ printf("client : connecting server ...\n"); /* 建立IP地址 */ adr_srvr.sin_family=AF_INET;//TCP/IP family adr_srvr.sin_port=htons(port);//port //adr_srvr.sin_addr.s_addr = htonl(INADDR_ANY);//local IP inet_pton(AF_INET, "192.168.1.11",&adr_srvr.sin_addr.s_addr); bzero(&(adr_srvr.sin_zero),8); sockfd=socket(AF_INET,SOCK_DGRAM,0);//UDP if(sockfd==-1) { perror("create socket error:"); exit(1); } /* 读取三行数据,传给udpserver*/ for(i=0;i<3;i++) { fgets(str1,80,stdin); printf("client sending:"); printf("%d:%s",i,str1); sprintf(buf,"%d:%s",i,str1); ret=sendto(sockfd,buf,sizeof(buf),0,\ (struct sockaddr *)&adr_srvr, sizeof(adr_srvr)); if(ret<0) { perror("sendto error:"); exit(1); } } sprintf(buf,"stop\n"); //send "stop" to server ret=sendto(sockfd,buf,sizeof(buf), 0, \ (struct sockaddr *)&adr_srvr, sizeof(adr_srvr)); if(ret<0) { perror("sendto error"); exit(1); } //fclose(fp); close(sockfd); exit(0); }
使用:
./server启用服务端
./client启用客户端,然后输入内容,服务端会收到。
ip和端口都在代码里定义了。
相关文章推荐
- Linux-挂载mount指令详解
- 利用ubuntu配置linux下c语言开发环境
- linux服务器编程之高效事件处理模式
- Centos6 install ClamAV
- linux基础:进程管理
- Linux那些事读书笔记
- Linux内核学习之编译篇
- Linux&Windows利用CRT的小文件传输工具--rz/sz
- linux profile vs .bashrc
- Linux实验二
- Linux常用命令之文件处理命令
- 第三周linux学习
- 第三章 Linux文件系统
- Linux 调度器 BFS 简介
- Linux下挂在SD卡
- VIM+Ctags Linux源码阅读神器
- 第二章 SSH远程登录
- red hat enterprise linux 6 改为中文
- Centos 窗口最小化后,找不到在哪里还原
- 【Linux】various questions