server.c
#include <string.h>
#include <sys/socket.h>
#include <stdio.h>
#include <errno.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define SERVADDR "192.168.137.81"
#define SERVPORT 3000
int main(int argc, char *argv[]){
int listenfd;
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
memset(&servaddr, 0, sizeof(servaddr));
char buffer[100];
int rev_len, send_len;
char *message = "hello client";
//Create a UDP socket
listenfd = socket(AF_INET,SOCK_DGRAM,0);
servaddr.sin_addr.s_addr = inet_addr(SERVADDR);
servaddr.sin_port = htons(SERVPORT);
servaddr.sin_family = AF_INET;
if(listenfd ==-1) {
perror("socket creation failed!\n");
return -1;
}
//bind service address to socket descriptor
if(bind(listenfd, (const struct sockaddr*) &servaddr, sizeof(servaddr))==-1){
perror("bind failed");
return -1;
}
//receive the datagram
rev_len = recvfrom(listenfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&cliaddr, (socklen_t*)&cliaddr_len);
if(rev_len == -1) {
perror("revforom failed");
return -1;
}
puts(buffer);
//send the reponse
send_len = sendto(listenfd, message, strlen(message), 0, (const struct sockaddr *)&cliaddr, (socklen_t)cliaddr_len );
if(send_len ==-1){
perror("sendto failed");
return -1;
}
printf("sendto successfully\n");
return 0;
}
client.c
/*
* 基本的udp c/s通信
* 时间
* 作者
*/
#include <string.h>
#include <sys/socket.h>
#include <stdio.h>
#include <errno.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define SERVADDR "192.168.137.81"
#define PORT 3000
int main(int argc, char *argv[]){
int sockfd ,send_len, rev_len;
struct sockaddr_in servaddr;
char *message = "hello server";
char buffer[100];
socklen_t servaddr_len;
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_addr.s_addr = inet_addr(SERVADDR);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
//create datagram socket
sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd ==-1){
perror("socket failed");
return -1;
}
//connect to server
if(connect(sockfd,(const struct sockaddr*)&servaddr,(socklen_t)sizeof(servaddr))==-1){
perror("connect failed");
printf("%s\n",strerror(errno));
return -1;
}
send_len = sendto(sockfd, message, strlen(message), 0, (const struct sockaddr *)&servaddr, (socklen_t)sizeof(servaddr) );
if(send_len ==-1){
perror("sendto failed");
return -1;
}
servaddr_len = sizeof(servaddr);
rev_len = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&servaddr, (socklen_t*)&servaddr_len);
if(rev_len == -1) {
perror("revforom failed");
printf("errno: %d: %s\n",errno,strerror(errno));
return -1;
}
puts(buffer);
return 0;
}