#include <iostream>
#include <string>
using namespace std;
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <stdarg.h>
#include <arpa/inet.h>
typedef uint32_t u32;
typedef uint8_t u8;
typedef uint16_t u16;
typedef struct sockaddr_in SU_addr;
#undef IP_MAX_SIZE
#define IP_MAX_SIZE 32
void SU_socketSetAddr(SU_addr* addr,char* ip, u16 port)
{
memset(addr, 0, sizeof(struct sockaddr_in));
addr->sin_family = AF_INET;
addr->sin_port = htons(port);
addr->sin_addr.s_addr = inet_addr(ip);
}
char* SU_addrToString(SU_addr* addr, char* str, int len)
{
if (len < 24 || addr == NULL || str == NULL)
return NULL;
::inet_ntop(addr->sin_family, &(addr->sin_addr), str, len);
sprintf(str, "%s:%d", str, ntohs(addr->sin_port));
cout<<"str is"<<str<<endl;
return str;
}
/*将ip地址字符串"x.x.x.x:p"转化成SU_addr结构*/
static int string_to_addr(const char* str, SU_addr* addr)
{
char ipstr[IP_MAX_SIZE] = { 0 };
char* pos = (char*)str;
char* dest = ipstr;
uint16_t port = 0;
while (*pos != '\0'){
if (*pos == ':')
break;
*dest++ = *pos ++;
}
if (*pos == '\0')
return -1;
pos++;
port = atoi(pos);
SU_socketSetAddr(addr, ipstr, port);
return 0;
}
int main()
{
SU_addr addr;
string_to_addr("192.168.1.100:8000",&addr);
cout<<ntohs(addr.sin_port)<<endl;
char str[32];
cout<<SU_addrToString(&addr,str,32)<<endl;
// cout<<addr.sin_addr.s_addr<<endl;
// cout<<str<<endl;
return 0;
}