#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<sys/poll.h>
#include"PublicFunctions.h"
#define oops(m,x) {perror(m);exit(x);}
#define BUFSIZE 1024 //设置缓冲大小
#define SERV_PORT 8888 //端口号
void sad_who_called(struct sockaddr_in *addrp){
char host[BUFSIZE];
int port;
get_internet_address(host,BUFSIZE,&port,addrp);//获取客户端IP地址
printf("from %s:%d\n",host,port);
}
int main(int ac,char *av[]){
int sock_fd; //套接子描述符号
int recv_num;
int send_num;
int client_len;
char recv_buf[20];
struct sockaddr_in addr_serv;
struct sockaddr_in addr_client;//服务器和客户端地址
int port=0;
sock_fd = socket(AF_INET,SOCK_DGRAM,0);
if(sock_fd < 0){
oops("socket",1);
} else{
printf("sock sucessful\n");
}
//初始化服务器断地址
memset(&addr_serv,0,sizeof(struct sockaddr_in));
addr_serv.sin_family = AF_INET; //协议族
addr_serv.sin_port = htons(SERV_PORT); //设置端口
addr_serv.sin_addr.s_addr = htonl(INADDR_ANY); //任意本地址
client_len = sizeof(struct sockaddr_in);
if(bind(sock_fd,(struct sockaddr *)&addr_serv,sizeof( struct sockaddr_in ))<0)//绑定失败
{
oops("bind",1);
}
while(1){
printf("begin recv:\n");
recv_num = recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&addr_client,&client_len);
if(recv_num < 0){
printf("bad\n");
oops("again recvfrom",1);
} else{
recv_buf[recv_num]='\0';
sad_who_called( &addr_client);
printf("recv sucess:%s\n",recv_buf);
}
}
close(sock_fd);
return 0;
}
评论0
最新资源