完成UDP服务端、客户端
udp模型
服务端
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#define MSG_ERR(msg) {\
printf("%d",__LINE__);\
perror(msg);\
return -1;\
}
#define PORT 8888
#define IP "192.168.196.133"
int main(int argc, const char *argv[])
{
// 创建流式套接字
int linkfd = socket(AF_INET,SOCK_DGRAM,0);
if(linkfd<0){
MSG_ERR("socket");
}
// 创建服务器IP断开信息结构体
struct sockaddr_in ust;
ust.sin_family=AF_INET;
ust.sin_port=htons(PORT);
ust.sin_addr.s_addr=inet_addr(IP);
// 绑定服务器IP端口
if(bind(linkfd,(struct sockaddr *)&ust,sizeof(ust))){
MSG_ERR("bind");
}
printf("bind success\n");
char recbuf[255]="";
int reclen=0;
char senbuf[255]="";
int senlen=0;
// 客户端信息结构体
struct sockaddr_in uct;
int cstlen = sizeof(uct);
while(1){
bzero(recbuf,255);
reclen=recvfrom(linkfd, recbuf, 255, 0, (struct sockaddr *)&uct, &cstlen);
if(reclen<0){
MSG_ERR("recvfrom");
}
printf("%s[%d]:%s\n",inet_ntoa(uct.sin_addr),ntohs(uct.sin_port),recbuf);
strcpy(senbuf,recbuf);
senbuf[strlen(senbuf)-1]=0;
strcat(senbuf,"****");
sendto(linkfd, senbuf, 255, 0, (struct sockaddr *)&uct,cstlen);
}
close(linkfd);
return 0;
}
客户端
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#define MSG_ERR(msg) {\
printf("%d",__LINE__);\
perror(msg);\
return -1;\
}
#define PORT 8888
#define IP "192.168.196.133"
int main(int argc, const char *argv[])
{
// 创建流式套接字
int linkfd=socket(AF_INET,SOCK_DGRAM,0);
if(linkfd<0){
MSG_ERR("socket");
}
// 创建服务器信息结构体
struct sockaddr_in ust;
ust.sin_family=AF_INET;
ust.sin_port=htons(PORT);
ust.sin_addr.s_addr=inet_addr(IP);
int ustlen=sizeof(ust);
char senbuf[255];
char revbuf[255];
int revlen;
while(1){
printf(":");
fgets(senbuf,255,stdin);
sendto(linkfd,senbuf,strlen(senbuf),0,(struct sockaddr *)&ust,ustlen);
bzero(revbuf,255);
revlen=recvfrom(linkfd,revbuf,255,0,NULL,0);
printf("%s\n",revbuf);
}
close(linkfd);
return 0;
}