socket addr赋值

发布时间 2023-12-30 08:14:18作者: lydstory
#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;
}