pcsl_ip.c
来自「This is a resource based on j2me embedde」· C语言 代码 · 共 670 行 · 第 1/2 页
C
670 行
return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_socket_getremoteaddr( void *handle, char *pAddress){ SOCKET s = (SOCKET)handle; int status; struct sockaddr_in sa; int saLen = sizeof (sa); sa.sin_family = AF_INET; status = getpeername(s, (struct sockaddr*)&sa, &saLen); if (SOCKET_ERROR == status) { return PCSL_NET_IOERROR; } /* * The string returned from inet_ntoa is only valid until the next * winsock API call. The string should not be freed. */ strcpy(pAddress, inet_ntoa(sa.sin_addr)); return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getlocalport( void *handle, int *pPortNumber){ SOCKET s = (SOCKET)handle; int status; struct sockaddr_in sa; int saLen = sizeof (sa); sa.sin_family = AF_INET; status = getsockname(s, (struct sockaddr*)&sa, &saLen); if (SOCKET_ERROR == status) { return PCSL_NET_IOERROR; } *pPortNumber = ntohs(sa.sin_port); return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getremoteport( void *handle, int *pPortNumber){ SOCKET s = (SOCKET)handle; int status; struct sockaddr_in sa; int saLen = sizeof (sa); sa.sin_family = AF_INET; status = getpeername(s, (struct sockaddr*)&sa, &saLen); if (SOCKET_ERROR == status) { return PCSL_NET_IOERROR; } *pPortNumber = ntohs(sa.sin_port); return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_init(void) { return pcsl_network_init_start(NULL);}/** * See pcsl_network.h for definition. */int pcsl_network_init_start(PCSL_NET_CALLBACK pcsl_network_callback) { static int netinit = 0; static WSADATA wsaData; (void)pcsl_network_callback; if (!netinit) { lastError = 0; rootAddrContext.asyncHandle = 0; rootAddrContext.next = NULL; if (0 != WSAStartup(0x0101, &wsaData )) { return PCSL_NET_IOERROR; } netinit = 1; } return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_init_finish(void) { return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_finalize_start(PCSL_NET_CALLBACK pcsl_network_callback) { (void)pcsl_network_callback; return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_finalize_finish(void) { return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_error( void *handle){ (void)handle; return lastError;}/** * See pcsl_network.h for definition. */int pcsl_network_getLocalHostName( char *pLocalHost){ if (SOCKET_ERROR == gethostname(pLocalHost, MAX_HOST_LENGTH)) { return PCSL_NET_IOERROR; } return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getLocalIPAddressAsString( char *pLocalIPAddress){ static char hostname[MAX_HOST_LENGTH]; struct hostent *pHost; struct in_addr* pAddr; if (SOCKET_ERROR == gethostname(hostname, sizeof (hostname))) { lastError = WSAGetLastError(); return PCSL_NET_IOERROR; } pHost = gethostbyname(hostname); lastError = WSAGetLastError(); if (NULL == pHost) { return PCSL_NET_IOERROR; } pAddr = (struct in_addr*)(pHost->h_addr); strcpy(pLocalIPAddress, inet_ntoa(*pAddr)); return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getHostByAddr_start(int ipn, char* host, void **pHandle, void **pContext) { int h_len; unsigned long addr = (unsigned long)ipn; struct hostent *hp; (void)pContext; hp = gethostbyaddr((char *)&addr, sizeof (addr), AF_INET); lastError = WSAGetLastError(); if (hp == NULL) { /* No DNS name for this address; convert it to a dotted-quad */ struct in_addr ipAddress; ipAddress.s_addr = ipn; strcpy(host, inet_ntoa(ipAddress)); } else { h_len = strlen(hp->h_name); if (h_len > MAX_HOST_LENGTH - 1) { h_len = MAX_HOST_LENGTH - 1; } (void)memmove(host, hp->h_name, h_len); host[h_len] = 0; } return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */int pcsl_network_getHostByAddr_finish(int ipn, char* host, void **pHandle, void *context) { (void)ipn; (void)host; (void)pHandle; (void)context; return PCSL_NET_INVALID;}/** * See pcsl_network.h for definition. */int pcsl_network_addrToString(unsigned char *ipBytes, unsigned short** pResult, int* pResultLen) { struct in_addr addr; char temp[80]; int tempLen; int i; memcpy(&addr.s_addr, ipBytes, sizeof(addr.s_addr)); strcpy(temp, inet_ntoa(addr)); tempLen = strlen(temp); *pResult = (unsigned short*)pcsl_mem_malloc(tempLen * sizeof (unsigned short)); if (NULL == *pResult) { return PCSL_NET_IOERROR; } for (i = 0; i < tempLen; i++) { (*pResult)[i] = temp[i]; } *pResultLen = tempLen; return PCSL_NET_SUCCESS;}/** * See pcsl_network.h for definition. */void pcsl_add_network_notifier( void *handle, int event) { long lEvent; switch (event) { case PCSL_NET_CHECK_ACCEPT: lEvent = FD_ACCEPT; break; case PCSL_NET_CHECK_READ: lEvent = FD_READ; break; case PCSL_NET_CHECK_WRITE: lEvent = FD_WRITE; break; case PCSL_NET_CHECK_EXCEPTION: default: /* need revisit */ return; } WSAAsyncSelect((SOCKET)handle, win32app_get_window_handle(), WM_NETWORK, lEvent);}/** * See pcsl_network.h for definition. */void pcsl_remove_network_notifier( void *handle, int event) { switch (event) { case PCSL_NET_CHECK_ACCEPT: break; case PCSL_NET_CHECK_READ: break; case PCSL_NET_CHECK_WRITE: break; case PCSL_NET_CHECK_EXCEPTION: default: /* need revisit */ return; } WSAAsyncSelect((SOCKET)handle, win32app_get_window_handle(), 0, 0);}/** * See pcsl_network.h for definition. */unsigned int pcsl_network_htonl( unsigned int value) { return htonl(value);}/** * See pcsl_network.h for definition. */unsigned int pcsl_network_ntohl( unsigned int value) { return ntohl(value);} /** * See pcsl_network.h for definition. */unsigned short pcsl_network_htons( unsigned short value) { return htons(value);}/** * See pcsl_network.h for definition. */unsigned short pcsl_network_ntohs( unsigned short value) { return ntohs(value);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?