client connect to the IP and Port that bind with server

server bind a IP and Port

then client connect the IP and Port

//client
/*if happend error: error C4996: 'inet_addr': Use inet_pton() or InetPton() instead 
    or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

Slove:  Project properties -> Configuration Properties -> C/C++ -> General -> SDL checks -> No
*/

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")

#define DES_IP "127.0.0.1"  
#define DES_PORT 5000

int main()
{
    SOCKET sock;
    char buf[1024];
    SOCKADDR_IN ser_addr;
    WSADATA wsaData;
    WORD wVersionRequired;
    wVersionRequired = MAKEWORD(2, 2);
    if (WSAStartup(wVersionRequired, &wsaData)!= 0)
    {
        printf("init failed %ld\n",WSAGetLastError());

        //  return 1;
    }

    //create socket
    sock = socket(AF_INET, SOCK_STREAM, 0);

    ser_addr.sin_addr.S_un.S_addr = inet_addr(DES_IP);  //127.0.0.1
    ser_addr.sin_port = htons(DES_PORT);                //5000
    ser_addr.sin_family = AF_INET;
    memset(ser_addr.sin_zero, 0, 8);

    //connect server
    if (connect(sock, (SOCKADDR *)&ser_addr, sizeof(SOCKADDR_IN)) != 0)
    {
        int nError = WSAGetLastError(); 
        printf("connect server failed! error:%d\n\n", WSAGetLastError());
        system("pause");
        return 1;
    }
    else
    {
        printf("connected server,send data now.press exit to end.\n\n");
    }

    //send data
    while(!NULL)
    {
        int SentBytes;
        int RecvBytes;
        char strRecv[1024] = { 0 };
        printf("send:");
        scanf("%s",buf);
        if (strcmp(buf, "exit") == 0) break;
        SentBytes = send(sock, buf, strlen(buf), 0);
        if (SentBytes == SOCKET_ERROR)
        {
            printf("send failed!\n");
            break;
        }


        //receive the data from server
        if ((RecvBytes = recv(sock, strRecv, sizeof(strRecv), 0)) != SOCKET_ERROR)
        {
            strRecv[RecvBytes] = 0;
            printf("recive: %s\n", strRecv);
        }
        else
        {
            printf("receive failed!%d\n",WSAGetLastError());

        }
        Sleep(1000);
    } 
    closesocket(sock);
    WSACleanup();
    return 0;
}
// server
//server for linux
#include <netinet/in.h>    
#include <sys/types.h>    
#include <sys/socket.h>    
#include <stdio.h>        
#include <stdlib.h>       
#include <string.h>       

#define SERVERPORT 9000    
# define MAXDATASIZE 1024
int main()
{
   char recBuf[MAXDATASIZE];
   char sendBuf[MAXDATASIZE];
   int sockfd, new_fd, numbytes;
   struct sockaddr_in server_addr; 
   struct sockaddr_in client_addr; 
   int sin_size;

   server_addr.sin_family = AF_INET; 
   server_addr.sin_port = htons(SERVERPORT); 
   server_addr.sin_addr.s_addr = INADDR_ANY;
   memset(&client_addr,0,sizeof(struct sockaddr));

   //create socket
   if ((sockfd = socket ( AF_INET , SOCK_STREAM , 0)) == - 1) { 
        printf ("socket error\n"); 
        return 1; 
    }

   //bind
   if ( bind (sockfd, (struct sockaddr *) & server_addr, sizeof (struct sockaddr))!=0){
        printf ("bind failed!"); 
        return 1; 
    }
    else{
    printf("server start \n\n");
    }

     while (1) {
     //listen
         if(listen(sockfd,6)!=0){
            printf("listen error"); 
            return 1;
     }
     //accept
     sin_size = sizeof ( struct sockaddr_in );
     if((new_fd=accept(sockfd,(struct sockaddr *)&client_addr,&sin_size))==-1){ 
            printf ( "lient has disconnected!" ); 
            break ; 
        }
    //printf ("server: got connection from %s\n",inet_ntoa(client_addr.sin_addr));
    printf ("getting data from client...\n");
    int bAvail = 1;
    while(bAvail){
       if ((numbytes=recv(new_fd,recBuf, MAXDATASIZE, 0) ) == - 1) { 
             printf( "data receive failed or client has disconnected!\n" ); 
//       bAvail = -1;
             break; 
           }
       if(numbytes) { 
//            recBuf[numbytes] = '/0'; 
            printf ("received: %s\n" ,recBuf); 
            sleep (1);
           }

       //send data to client
       printf("send:");
       scanf("%s",sendBuf);
       if(send(new_fd,sendBuf,strlen(sendBuf),0)==-1){
          printf ( "send error" ); 
          return -1;
       }
       sleep (1);      
    }close(new_fd); 
     } 
     close(sockfd);
     return 0; 
}

参考:
BSD Socket:
http://blog.csdn.net/blueman2012/article/details/6693605

Logo

更多推荐