Linux C 套接字socket UDP
来源:互联网 发布:mac页面比例缩小快捷键 编辑:程序博客网 时间:2024/05/17 03:45
server端:
int sockfd; sockfd = socket(AF_INET, SOCK_DGRAM, 0); //创建套接字 SOCK_DGRAM : UDP
struct sockaddr_in server_Addr; serverAddr.sin_family = AF_INET; //AF_INET : IPv4协议族
serverAddr.sin_port = htons(5678); //端口号
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); //任意本机地址
bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)); //绑定套接口
int rcvLen; rcvLen = recvfrom(sockfd, readbuf, 128, 0, (struct sockaddr *)&clientAddr, &len); //读取(接收)
sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&clientAddr, len); //写入(发送)
client端:
int sockfd; sockfd = socket(******************);
struct sockaddr_in clientAddr; clientAddr.sin_family = AF_INET;
clientAddr.sin_port = htons(5678);
clientAddr.sin_addr.s_addr = htonl("127.0.0.1");
sendto(sockfd, "hello", 6, 0, (struct sockaddr *)&clientAddr, sizeof(struct sockaddr));
int rcvLen; rcvLen = rcvfrom(sockfd, rcvbuf, 128, 0, (struct sockaddr *)clientAddr, &len);
代码(server端):
1 /* 2 * File: UDP_server.c 3 * 4 * 创建套接字、绑定套接字、读写数据、关闭套接字 5 * 6 * */ 7 8 #include <stdio.h> 9 #include <netinet/in.h> 10 #include <string.h> 11 #include <time.h> 12 13 int main() 14 { 15 int sockfd; 16 struct sockaddr_in serverAddr, clientAddr; 17 socklen_t len = sizeof(struct sockaddr); 18 19 int rcvLen; 20 char readbuf[128], sendbuf[128]; 21 time_t mytime; 22 23 sockfd = socket(AF_INET, SOCK_DGRAM, 0); //创建 套接字 24 printf("server socket create success. sockfd = %d\n", sockfd); 25 26 serverAddr.sin_family = AF_INET; //AF_INET IPv4协议族 27 serverAddr.sin_port = htons(5678); //端口号 28 serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); //任意本机地址 29 30 bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)); //绑定套接字 31 printf("***********\n"); 32 33 rcvLen = recvfrom(sockfd, readbuf, 128, 0, (struct sockaddr *)(&clientAddr), &len); //读 34 if(rcvLen < 0) 35 { 36 printf("ERROR: receive failure.\n"); 37 close(sockfd); 38 return -1; 39 } 40 41 printf("client IP: 0x%X, port: %d\n", ntohl(clientAddr.sin_addr.s_addr), ntohs(clientAddr.sin_port)); 42 printf("receive %d bytes: %s\n", rcvLen, readbuf); 43 mytime = time(NULL); 44 snprintf(sendbuf, sizeof(sendbuf), "%s", ctime(&mytime)); 45 sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&clientAddr, len); //写 46 47 bzero(sendbuf, 128); 48 snprintf(sendbuf, sizeof(sendbuf), "%s", "华人牌2060款手机傻妞为您服务!请输入开机密码..."); 49 sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&clientAddr, len); //写 50 51 //bzero(&clientAddr, len); 52 while(1) 53 { 54 bzero(sendbuf, 128); 55 bzero(readbuf, 128); 56 recvfrom(sockfd, readbuf, sizeof(readbuf), 0, (struct sockaddr *)&clientAddr, &len); 57 printf("client IP: 0X%X, port: %d > %s", 58 ntohl(clientAddr.sin_addr.s_addr), ntohs(clientAddr.sin_port), readbuf); 59 printf("可爱的自己 > "); 60 fgets(sendbuf, sizeof(sendbuf), stdin); 61 sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&clientAddr, len); 62 } 63 64 close(sockfd); 65 return 0; 66 }
1 #include <stdio.h> 2 #include <netinet/in.h> 3 #include <string.h> 4 5 int main(int argc, char *argv[]) 6 { 7 int sockfd; 8 9 //short int sin_family; 协议族,在socket编程中 只能是AF_INET 10 //unsigned short int sin_port; 端口号,使用网络字节顺序 11 //struct in_addr sin_addr; 含unsigned long s_addr; 存储IP地址 12 //unsigned char sin_zero[8]; 13 struct sockaddr_in servAddr; //库 <netinet/in.h> 14 socklen_t len = sizeof(struct sockaddr); 15 16 int rcvLen; 17 char rcvbuf[128], sendbuf[128]; 18 19 //int socket(int domain, int type, int protocol) 20 //参数domain;设置网络通信的域,即选择通信协议族。AF_INET为IPv4 21 //参数type:设置套接字通信的类型,主要有SOCK_STREAM(流式套接字,TCP连接)、SOCK_DGRAM(数据包套接字,UDP连接) 22 //参数protocol:制定type协议类型中的某个特定类型。通常某协议中只有一种特定类型,即protocol参数仅能设为0 23 sockfd = socket(AF_INET, SOCK_DGRAM, 0); //创建 套接字 24 printf("client socket create success. sockfd = %d\n", sockfd); 25 printf(" ********************************\n"); 26 //bzero(&servAddr, sizeof(servAddr)); //初始化 servAddr变量 27 servAddr.sin_family = AF_INET; 28 servAddr.sin_port = htons(5678); 29 servAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 30 31 //client端 connect 连接 32 //connect(sockfd, (struct sockaddr *)&servAddr, sizeof(servAddr)); //连接 套接字 和 IP 33 //UDP无须连接,直接发送 34 sendto(sockfd, "hello\n", 8, 0, (struct sockaddr *)(&servAddr), sizeof(struct sockaddr)); //写 35 36 //rcvLen = read(sockfd, rcvbuf, 128); //读取 信息 37 bzero(rcvbuf, sizeof(rcvbuf)); 38 rcvLen = recvfrom(sockfd, rcvbuf, sizeof(rcvbuf), 0, (struct sockaddr *)&servAddr, &len); //读 39 40 if(rcvLen < 0) 41 { 42 printf("ERROR: read failure.\n"); 43 return -1; 44 } 45 if(rcvLen == 0) 46 { 47 printf("Server close connection.\n"); 48 return -1; 49 } 50 printf("receive data[%d bytes]: %s", rcvLen, rcvbuf); 51 52 bzero(rcvbuf, sizeof(rcvbuf)); 53 rcvLen = recvfrom(sockfd, rcvbuf, sizeof(rcvbuf), 0, (struct sockaddr *)&servAddr, &len); 54 printf("receive data[%d bytes]: %s\n", rcvLen, rcvbuf); 55 while(1) 56 { 57 bzero(rcvbuf, sizeof(rcvbuf)); 58 bzero(sendbuf, sizeof(sendbuf)); 59 printf("me > "); 60 fgets(sendbuf, sizeof(sendbuf), stdin); 61 sendto(sockfd, sendbuf, sizeof(sendbuf), 0, (struct sockaddr *)&servAddr, len); 62 recvfrom(sockfd, rcvbuf, sizeof(rcvbuf), 0, (struct sockaddr *)&servAddr, &len); 63 printf("傻妞 IP: 0x%X port: %d > %s\n", 64 ntohl(servAddr.sin_addr.s_addr), ntohs(servAddr.sin_port), rcvbuf); 65 } 66 close(sockfd); 67 68 return 0; 69 }
执行:
- Linux C 套接字socket UDP
- 套接字socket实现UDP
- Linux网络编程【二】:UDP socket套接字详解
- linux Udp 套接字
- Linux C 套接字socket select
- Linux Socket套接字
- Linux套接字(UDP篇)
- Linux UDP套接字编程
- Socket 之 2: UDP套接字
- windows套接字(socket)UDP篇
- Socket之UDP套接字小例子
- 网络套接字socket编程之UDP
- Linux C socket 基于 UDP
- Linux C网络编程之Socket套接字
- Linux C 套接字socket TCP(1)
- 【Linux基础】套接字socket
- linux socket套接字理解
- Linux - Socket网络套接字
- 表、栈和队列
- ubuntu 16.4安装后无法在win7里拖动和复制文本和文件的解决方法
- Python3-Flask-微信公众号开发
- CSDN机器学习笔记十一 k-近邻算法
- 《Advanced Bash-scripting Guide》学习(三):自删除脚本和自读取内容的脚本
- Linux C 套接字socket UDP
- windows下安装mongodb
- 数据结构与算法Java版——栈与队
- 在vue项目中引入高德地图及其UI组件
- java中"=="和equals方法比较
- java虚拟机 Class类文件的结构
- 进程间通信 之 消息队列(Linux)
- 《C++高级编程》中的收获
- 状态模式