- 论坛徽章:
- 0
|
最近在写一个socket通信的东西,就写了一个简单的客户端和服务器端用来测试,如果我声明的是流式套接字(stream socket)的话,建立TCP连接的话就好用,但是我想发的是UDP包,所以得用数据报套接字SOCK_DGRAM,那么服务器段怎么写呢,无法监听
服务器代码如下:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/un.h>
#include <unistd.h>
#define EHCO_PORT 514
#define MAX_CLIENT_NUM 10
int main()
{
int socketfd;
socketfd = socket(AF_INET, SOCK_DGRAM, 0);
if(socketfd == -1)
{
printf("errno=%d \n", errno);
exit(1);
}
else
{
printf("socket create successfully \n" ;
}
struct sockaddr_in sa;
bzero(&sa, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(EHCO_PORT);
sa.sin_addr.s_addr = htons(INADDR_ANY);
bzero(&(sa.sin_zero), ;
if(bind(socketfd, (struct sockaddr *)&sa, sizeof(sa))!= 0)
{
printf("bind failed \n" ;
printf("errno=%d \n", errno);
exit(1);
}
else
{
printf("bind successfully \n" ;
}
//listen
if(listen(socketfd ,MAX_CLIENT_NUM) != 0)
{
printf("listen error \n" ;
exit(1);
}
else
{
printf("This is the server!\n" ;
printf("listen successfully ,listening...\n" ;
}
int clientfd;
struct sockaddr_in clientAdd;
char buff[1001];
socklen_t len = sizeof(clientAdd);
int closing =0;
while( closing == 0 && (clientfd = accept(socketfd, (struct sockaddr *)&clientAdd, &len)) >0 )
{
printf("A client login!\n" ;
printf("The client's info:\n" ;
printf("*****************************************\n" ;
//printf("IP:%s\n",clientAdd->sin_addr);
printf("Sin_family:%d\n",clientAdd.sin_family);
printf("Sin_port:%d\n",clientAdd.sin_port);
printf("*****************************************\n" ;
int n;
while(1)
{
memset(buff,0,sizeof(buff));
n = recv(clientfd,buff, 1000,0 );
//write(STDOUT_FILENO, buff, n);
printf("The client's input:%s \n", buff);
printf("number of receive bytes = %d \n", n);
send(clientfd, buff, n, 0);
buff[n] = '\0';
if(strcmp(buff, "quit ") == 0)
{
break;
}
else if(strcmp(buff, "close ") == 0)
{
//server closing
closing = 1;
printf("server is closing \n");
break;
}
}
close(clientfd);
}
close(socketfd);
return 0;
} |
|