multi-platform TCP, UDP client socket



/***************************************************
*
*  TCP Client_multi-platform
*
****************************************************/
#ifdef WIN32
#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
#endif
#endif

#include <stdio.h>

#ifdef WIN32
#pragma comment(lib, "ws2_32.lib") // Winsock 라이브러리 자동 링크
#include <windows.h>
#include <winsock2.h>
#define NET_INVALID_SOCKET INVALID_SOCKET
#define NET_SOCKET_ERROR SOCKET_ERROR
typedef int socklen_t; // unix 타입은 unsigned int, Windows는 int
#else
#include <sys/socket.h> // for socket(), bind(), connet()
#include <arpa/inet.h> // for sockaddr_in, inet_ntoa()
#include <unistd.h> // for close()
#include <stdlib.h> // for exit()
typedef int SOCKET;
#define NET_INVALID_SOCKET -1
#define NET_SOCKET_ERROR -1
#endif

#define MAX_DATA_SIZE 100

int main(){
#ifdef WIN32
WSADATA wsaData;
WORD version;
#endif

SOCKET ServerSocket;
SOCKET numbytes;

struct sockaddr_in ServerAddress;
unsigned short ServerPort = 5061;
char buf[MAX_DATA_SIZE];
#ifdef WIN32
version = MAKEWORD(2,2);
if(WSAStartup(version, &wsaData) < 0)
{
printf("WSAStartup Init Error");
WSACleanup();
exit(0);
}
#endif

ServerSocket = socket(AF_INET, SOCK_STREAM, 0);
if(ServerSocket == NET_INVALID_SOCKET)
{
printf("Fail to create the socket\n");
#ifdef WIN32
closesocket(ServerSocket);
WSACleanup();
#else
close(ServerSocket);
#endif
exit(0);
}
ServerAddress.sin_family = AF_INET;
ServerAddress.sin_addr.s_addr = inet_addr("23.44.153.149");
ServerAddress.sin_port = htons(ServerPort);
if(connect(ServerSocket, (struct sockaddr*)&ServerAddress, sizeof(ServerAddress)) < 0){
printf("Fail to connect to server\n");
#ifdef WIN32
closesocket(ServerSocket);
WSACleanup();
#else
perror("Fail to connect to server");
close(ServerSocket);
#endif
exit(0);
}
else{
printf("Successfully connected to server\n");
if( (numbytes = recv(ServerSocket, buf, MAX_DATA_SIZE, 0)) == -1){
printf("Fail to receive\n");
getchar();
exit(1);
}
buf[numbytes] = '\0';
}
printf("Received msg : %s\n",buf);
#ifdef WIN32
closesocket(ServerSocket);
WSAClean();
#else
close(ServerSocket);
#endif
printf("Close Client session\n");
getchar();
return 1;
}



/***************************************************
*
*  UDP Client_Linux only
*
****************************************************/

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>


int main()
{
    int sockfd;
    int clilen;
    int state;
    char buf[255] = "TestTestTest";


    struct sockaddr_in serveraddr;    

    //memset(buf, 0x00, 255); 
    clilen = sizeof(serveraddr);
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0)
    {
        perror("socket error : ");
        exit(0);
    }

    bzero(&serveraddr, sizeof(serveraddr));
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serveraddr.sin_port = htons(5060);

    

    sendto(sockfd, (void *)&buf, sizeof(buf), 0, (struct sockaddr *)&serveraddr, clilen);
memset(buf, 0x00, 255); 
    recvfrom(sockfd, (void *)&buf, sizeof(buf), 0, NULL, NULL); 

    printf("recved : %s",buf);
    close(sockfd);

return 0;
}

댓글 없음:

댓글 쓰기

안녕하세요 :)