secgateway/Product/user/user_auth/portal-server.c

127 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
/*
监听后一直处于accept阻塞状态
直到有客户端连接,
当客户端如数quit后断开与客户端的连接
*/
int main(int args, char** argv)
{
int fd;
struct sockaddr_in server_addr;
struct sockaddr_in clientAddr;
int addr_len = sizeof(clientAddr);
int client;
char buffer[200];
int iDataNum;
char ip[] = "192.168.209.193";
char *str = ip;
uint16_t port = 61;
//建立socket
fd = socket(AF_INET, SOCK_STREAM, 0);
if(fd == -1)
{
printf("socket failed");
return -1;
}
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
printf("the value of str:%s\n", str);
//将IP地址转换成网络字节序
int ret = inet_pton(AF_INET, str, &server_addr.sin_addr);
printf("the value of ret is:%d\n",ret);
printf("inet_pton:0x%x\n", server_addr.sin_addr.s_addr);
if(ret < 0)
{
printf("error");
return -1;
}
int i = bind(fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
printf("the value of i is :%d\n", i);
if(i < 0)
{
printf("bind error");
return -1;
}
//开启监听,第二个参数是最大监听数
listen(fd,5);
if(listen(fd, 5) < 0)
{
printf("listen error");
return -1;
}
while(1)
{
printf("监听端口: %d\n", port);
client = accept(fd, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);
if(client < 0)
{
printf("accept error");
continue;
}
printf("等待消息...\n");
printf("IP is %s\n", inet_ntoa(clientAddr.sin_addr));
printf("Port is %d\n", htons(clientAddr.sin_port));
while(1)
{
printf("读取消息:");
buffer[0] = '\0';
iDataNum = recv(client, buffer, 1024, 0);
if(iDataNum < 0)
{
printf("recv null");
continue;
}
buffer[iDataNum] = '\0';
if(strcmp(buffer, "quit") == 0)
break;
printf("%s\n", buffer);
printf("发送消息:");
scanf("%s", buffer);
printf("\n");
send(client, buffer, strlen(buffer), 0);
if(strcmp(buffer, "quit") == 0)
break;
}
}
close(fd);
return 0;
}