两个udp,一个在端口5555绑定守候,一个在5556绑定守候。
udpserver.c
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <fcntl.h>
#include <ctype.h>
#include <termios.h>
#include <sys/mman.h>
int main()
{
int mysock,len;
struct sockaddr_in server,client,peer;
char msg[256];
int server_len,client_len;
if((mysock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
return -1;
}
else {
printf("socket created,ID:%d\n",mysock);
}
server_len = sizeof(struct sockaddr_in);
bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(5555);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
//addr.sin_addr.s_addr = INADDR_ANY;
client_len = sizeof(struct sockaddr_in);
bzero(&client, sizeof(client));
client.sin_family = AF_INET;
client.sin_port = htons(5556);
client.sin_addr.s_addr = inet_addr("127.0.0.1");
if(bind(mysock, (struct sockaddr*)&server, sizeof(server)) < 0)
{
perror("bind");
return -1;
}
else {
//非阻塞
if (fcntl(mysock,F_SETFL,fcntl(mysock,F_GETFD,0)|O_NONBLOCK) != -1) {
printf("fcntl success.\n");
}
else{
printf("fcntl fail.\n");
}
printf("bind ok.\n");
}
while(1)
{
//printf("ready to read udpsocket.\n");
//从端口5555非阻塞接收
bzero(msg,sizeof(msg));
len = recvfrom(mysock,msg,sizeof(msg),0,(struct sockaddr*)&peer,(socklen_t*)&server_len);
if (len > 0) {
printf("recvfrom,len=%d,content=%s\n",len,msg);
}
//延时
usleep(1000*1000);
//从端口5556发送数据
strcpy(msg,"hello");
len = strlen(msg);
len = sendto(mysock,msg,len,0,(struct sockaddr*)&client,sizeof(client));
printf("sendto,len=%d,content=%s\n",len,msg);
}
}
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <fcntl.h>
#include <ctype.h>
#include <termios.h>
#include <sys/mman.h>
#define PORT 1234
#define MAXDATASIZE 100
int main()
{
int mysock,len;
struct sockaddr_in server,client,peer;
char msg[256];
int server_len,client_len;
if((mysock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
return -1;
}
else {
printf("socket created,ID:%d\n",mysock);
}
server_len = sizeof(struct sockaddr_in);
bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(5555);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
//addr.sin_addr.s_addr = INADDR_ANY;
client_len = sizeof(struct sockaddr_in);
bzero(&client, sizeof(client));
client.sin_family = AF_INET;
client.sin_port = htons(5556);
client.sin_addr.s_addr = inet_addr("127.0.0.1");
if(bind(mysock, (struct sockaddr*)&client, sizeof(client)) < 0)
{
perror("bind");
return -1;
}
//非阻塞
if (fcntl(mysock,F_SETFL,fcntl(mysock,F_GETFD,0)|O_NONBLOCK) != -1) {
printf("fcntl success.\n");
}
else{
printf("fcntl fail.\n");
}
while(1)
{
printf("ready to read udpsocket.\n");
//从端口5556非阻塞接收
bzero(msg,sizeof(msg));
len = recvfrom(mysock,msg,sizeof(msg),0,(struct sockaddr*)&peer,(socklen_t*)&server_len);
if (len > 0) {
printf("recvfrom,len=%d,content=%s\n",len,msg);
}
//延时
usleep(1000*1000);
//从端口5555发送数据
strcpy(msg,"1234567890");
len = strlen(msg);
len = sendto(mysock,msg,len,0,(struct sockaddr*)&server,sizeof(server));
printf("sendto,len=%d,content=%s\n",len,msg);
}
}