Linux 基于UDP(C/S)双向通信

源码如下

“client.c”


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc,char *argv[])
{
unsigned short port = 8888;
if(argc>1)//服务器端口号
{
port=atoi(argv[1]);
puts(argv[1]);
printf("%d\n",port);
}
int sfd;
sfd=socket(AF_INET,SOCK_DGRAM,0);
if(sfd<0)
{
perror("socket");
exit(-1);
}
struct sockaddr_in dest_addr;
memset(&dest_addr,0,sizeof(dest_addr));
dest_addr.sin_family=inet_addr("0.0.0.0");
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(port);
printf("%d\n",dest_addr.sin_port);

while(1)
{
printf("发送数据\n");
char send_buf[512]="";
fgets(send_buf,sizeof(send_buf),stdin);
send_buf[strlen(send_buf)-1]='\0';
sendto(sfd,send_buf,strlen(send_buf),0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

printf("开始接受数据\n");
int rec_len;
char recv_buf[512]="";
char cli_ip[INET_ADDRSTRLEN]="";
struct sockaddr_in sever_addr;
socklen_t sever_len = sizeof(sever_addr);

rec_len=recvfrom(sfd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&sever_addr,&sever_len);
printf("rec_len is %d\n",rec_len);
inet_ntop(AF_INET,&sever_addr.sin_addr,cli_ip,INET_ADDRSTRLEN);
printf("ip:%s,port:%d\n",cli_ip,ntohs(sever_addr.sin_port));
printf("data(%d):%s\n",rec_len,recv_buf);


}

close(sfd);
return 0;
}


"server.c"


#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <arpa/inet.h>
#include<string.h>
int main()
{
int sfd;
unsigned short port=8888;//监听端口
sfd=socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_addr.s_addr=htons(INADDR_ANY);//本机地址
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
printf("Binding server to port is %d\n",port);
int log;
log=bind(sfd,(const struct sockaddr *)&addr,sizeof(addr));
if(log!=0)
{
perror("bind");
close(sfd);
exit(-1);
}
printf("seceive data !\n");
while(1)
{
int rec_len;
int send;
char buf[1024];
char cli_ip[INET_ADDRSTRLEN]="";
struct sockaddr_in client_addr;
socklen_t cliaddr_len=sizeof(client_addr);
rec_len=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&cliaddr_len);
printf("reclen is %d\n",rec_len);
inet_ntop(AF_INET,&client_addr.sin_addr,cli_ip,INET_ADDRSTRLEN);
printf("ip:%s,port:%d\n",cli_ip,ntohs(client_addr.sin_port));
printf("data(%d):%s\n",rec_len,buf);
printf("发送数据\n");
char send_buf[524]="";
printf("server send\n");
fgets(send_buf,sizeof(send_buf),stdin);
printf("this is send buf\n");
send_buf[strlen(send_buf)-1]='\0';
send=sendto(sfd,send_buf,strlen(send_buf),0,(struct sockaddr *)&client_addr,sizeof(client_addr));
printf("%d\n",send);
}
close(sfd);
return 0;
}
posted @ 2020-12-18 11:38  成一  阅读(419)  评论(0)    收藏  举报